gpt4 book ai didi

mysql - 德尔福、dbExpress 和 UTF8

转载 作者:行者123 更新时间:2023-11-29 03:02:16 27 4
gpt4 key购买 nike

我们刚刚将 MySQL 服务器从 5.0 升级到 5.1。

剩下的任务是最终解决我们的 Unicode 支持问题,这个问题自 Delphi 2010 以来一直困扰着我们。我们现在使用的是 XE5。

新数据库已设置为默认排序规则 utf8-general-ci。这些表已迁移,其原始排序规则为 latin1-swedish-ci

目前,我们所有的应用程序都使用 TSQLConnection.ServerCharSet = "" 进行读取,因为将读取连接设置为 utf8 会产生意想不到的结果。

我们将连接设置为 TSQLConnection.ServerCharSet = "utf8"

我现在已经制作了新架构的本地副本并将所有表转换为 utf8-general-ci - 这看起来进展顺利。

但是,当我在新服务器上测试时,仍然不流畅:

  • 将读取连接设置为 utf8 以某种形式的汉字提供结果。
  • 将读取连接设置为 utf8-general-ci"" 可正确读取。
  • 将写入连接设置为 "" 会在写入“£”或“€”字符时产生垃圾
  • 将写入连接设置为 utf8 可以正确写入

我怀疑 utf8-general-ci 没有被 dbExpress 识别为一个选项,因此被忽略了

我还怀疑 SQLConnection.Locale 设置可能是个问题 - 目前它被设置为 0000,但我已经尝试将它设置为 LOCALE_SYSTEM_DEFAULT (2048) 但没有成功...

有什么方法可以避免为读取/写入例程使用 2 个单独的 TSQLConnections?

编辑

根据 Arioch 'The 的建议,我对不同的字符串列类型进行了测试。我们一直在使用 Text/Tinytext 字段,这就是我们发现问题的地方。

使用 VarChar 列类型时不会出现此问题。

我们想要一个不要求我们使用第三方驱动程序/连接的建议,因为此举不符合我们当前的开发策略

最佳答案

Arioch 'The 的最后评论让我找到了这个问题:

With Delphi Xe2 and MySQL 5.1, how return UTF8 string from query?

这又会导致此 Embarcadero 页面:

dbExpress Data Type Mapping for Supported Databases

找到答案的地方:

文本 TDBXDataTypes.AnsiStringType

即阅读 AsAnsiString 而不是 AsString

关于mysql - 德尔福、dbExpress 和 UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com