【发布时间】:2014-01-28 17:04:43
【问题描述】:
我们刚刚将 MySQL 服务器从 5.0 升级到 5.1。
剩下的任务是最终解决我们的 Unicode 支持问题,自 Delphi 2010 以来一直困扰着我们。我们现在使用 XE5。
新数据库已设置为默认排序规则 utf8-general-ci。 这些表已迁移,其原始排序规则为 latin1-swedish-ci。
目前,由于将读取连接设置为 utf8,我们所有使用 TSQLConnection.ServerCharSet = "" 读取的应用程序都出现了意外结果。
我们将连接设置为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 列类型时不会出现问题。
我们想要一个不要求我们使用第三方驱动程序/连接的建议,因为该举措不符合我们当前的发展战略
【问题讨论】:
-
您是否尝试过其他供应商的 MySQL DBX 驱动程序?
-
否 - 目前只有 Embarcadero 提供。
-
尝试它们,即使只是为了“分而治之”的错误二进制搜索
-
Devart MySQL 驱动程序使用“使用 Unicode”检查读写...
-
你也不知道你读什么写什么,char,varchar,blob?不知道 MariaDB 和 FirebirdSQL 有何不同
标签: mysql delphi utf-8 delphi-xe5 dbexpress