Delphi、dbExpress和UTF8

3
我们刚刚将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列类型时,问题不会发生。
我们希望得到一个不需要我们使用第三方驱动程序/连接的建议,因为这种移动与我们当前的开发策略不符。

1
即使只是为了“分而治之”和二分查找,也要尝试它们。 - Arioch 'The
Devart MySQL驱动程序在读写时都勾选了“使用Unicode”... - Dan Kelly
这是一篇相当古老的文章!在升级到MySQL 5.1之前,我们发现dbExpress应该支持它(现在找不到来源了)。FireDAC已经被引入以提供对现代版本的支持,如果我们要切换架构,那么我们可能会选择这种方式... - Dan Kelly
这是一篇相当古老的文章!那又怎样?如果我们要从dbExpress切换到dbExpress的架构,你是什么意思?dbExpress只是支持任何数据库的框架,就像ODBC、ADO、SOAP和REST一样,它们都是框架。支持来自某些驱动程序。您可以使用EMBT驱动程序或尝试不同的驱动程序,看看它们是否有效。它们可能有效,也可能失败,但为什么不尝试呢?使用FLOSS驱动程序,您可以自己修复错误。EMBT永远不会这样做,您知道的。 - Arioch 'The
1
另外,您没有说明您读取和写入什么类型的数据,是char、varchar还是blob?我不知道在MariaDB中如何处理,但在FirebirdSQL中会有所不同。 - Arioch 'The
显示剩余3条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接