我们刚刚将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-general-ci 没有被dbExpress识别为选项,因此被忽略
我还怀疑SQLConnection.Locale设置可能是一个问题 - 目前设置为0000,但我尝试将其设置为LOCALE_SYSTEM_DEFAULT(2048)但没有成功...
我们有什么方法可以避免为读/写例程设置2个独立的TSQLConnection?
修改
根据 Arioch'的建议,我运行了不同字符串列类型的测试。我们一直在使用Text / Tinytext字段,这就是我们遇到问题的地方。
使用VarChar列类型时,不会发生问题。
我们想要一个不要求我们使用第三方驱动程序/连接的建议,因为此举不符合我们当前的开发策略
答案 0 :(得分:1)
来自 Arioch'的最终评论让我找到了这个问题:
With Delphi Xe2 and MySQL 5.1, how return UTF8 string from query?
这又导致了这个Embarcadero页面:
dbExpress Data Type Mapping for Supported Databases
其中找到了答案:
text TDBXDataTypes.AnsiStringType
即。阅读AsAnsiString
而不是AsString