我们刚刚将MySQL服务器从5.0升级到了5.1。
剩下的任务是最终解决我们自Delphi 2010以来一直困扰着我们的Unicode支持问题。我们现在使用的是XE5。
新数据库的默认排序已设置为utf8-general-ci。表已迁移,其原始排序为latin1-swedish-ci。
目前,我们所有的应用程序都使用TSQLConnection.ServerCharSet = ""进行读取连接,因为将读取连接设置为utf8会产生意外的结果。
我们使用TSQLConnection.ServerCharSet = "utf8"进行写操作。
我现在已经制作了新架构的本地副本,并将所有表转换为utf8-general-ci,看起来这一步进展顺利。
然而,当我在新服务器上测试时,情况仍然不理想:
- 将读取连接设置为utf8会产生某种汉字形式的结果。 - 将读取连接设置为utf8-general-ci或""可以正确读取。 - 将写入连接设置为""将在写入“£”或“€”字符时生成垃圾。 - 将写入连接设置为utf8可以正确写入。
我怀疑dbExpress没有将utf8-general-ci识别为选项,因此被忽略了。
我还怀疑SQLConnection.Locale设置可能存在问题 - 目前设置为0000,但我尝试将其设置为LOCALE_SYSTEM_DEFAULT(2048),但没有成功...
有没有办法避免我们为读/写例程而有两个不同的TSQLConnections?
根据Arioch 'The的建议,我进行了使用不同字符串列类型的测试。我们一直在使用Text/Tinytext字段,这就是我们遇到问题的地方。
当使用VarChar列类型时,问题不会发生。
我们希望得到一个不需要我们使用第三方驱动程序/连接的建议,因为这种移动与我们当前的开发策略不符。
剩下的任务是最终解决我们自Delphi 2010以来一直困扰着我们的Unicode支持问题。我们现在使用的是XE5。
新数据库的默认排序已设置为utf8-general-ci。表已迁移,其原始排序为latin1-swedish-ci。
目前,我们所有的应用程序都使用TSQLConnection.ServerCharSet = ""进行读取连接,因为将读取连接设置为utf8会产生意外的结果。
我们使用TSQLConnection.ServerCharSet = "utf8"进行写操作。
我现在已经制作了新架构的本地副本,并将所有表转换为utf8-general-ci,看起来这一步进展顺利。
然而,当我在新服务器上测试时,情况仍然不理想:
- 将读取连接设置为utf8会产生某种汉字形式的结果。 - 将读取连接设置为utf8-general-ci或""可以正确读取。 - 将写入连接设置为""将在写入“£”或“€”字符时生成垃圾。 - 将写入连接设置为utf8可以正确写入。
我怀疑dbExpress没有将utf8-general-ci识别为选项,因此被忽略了。
我还怀疑SQLConnection.Locale设置可能存在问题 - 目前设置为0000,但我尝试将其设置为LOCALE_SYSTEM_DEFAULT(2048),但没有成功...
有没有办法避免我们为读/写例程而有两个不同的TSQLConnections?
根据Arioch 'The的建议,我进行了使用不同字符串列类型的测试。我们一直在使用Text/Tinytext字段,这就是我们遇到问题的地方。
当使用VarChar列类型时,问题不会发生。
我们希望得到一个不需要我们使用第三方驱动程序/连接的建议,因为这种移动与我们当前的开发策略不符。