吐槽:MySQL和Delphi2010的UTF8编码

kenwee 2014-11-25 12:29:32
近来开发一套系统,是PHP+MySQL+Delphi客户端。
服务端采用Linux+Apache+MySQL,Linux字符编码是UTF8,Apache是UTF8,MySQL也是UTF8。
用浏览器打开,中文完全无问题。

Delphi2010用ZeosLib连接MySQL,任何编码都是乱码。
跟踪了半天,发现MySQL改用Latin1,Delphi无论设置GBK还是UTF8,都不会乱码,但是浏览器打开全是乱码。

简单说:网页乱码,客户端就正常,客户端乱码,服务端就正常。
折腾死我了。

尝试了N多组合,就是不行。
当服务端正常的时候,Delphi测试CodePage,显示是CP936,也就是GBK。
猜想,Delphi会自动探测当前的系统的CodePage,并对VCL显示的内容进行转换。

可是我用了几种方式把取得的结果进行编码转换,不是问号就是不明文字,总之就是显示不出来中文。
真心求救了。
...全文
343 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenwee 2014-11-26
  • 打赏
  • 举报
回复
问题解决。 还真不怪Delphi。 故障原因,MySQL即便是在my.cnf或者my.ini里面设置了全部使用UTF8之后,如果连接的客户端不强制制定编码,它会“自动”进行编码选择。 PHP服务器端就因为没有指定支付编码,而导致其在连接数据库的时候,擅自选择了Latin1字符集。 mysql_connect('localhost','user','password'); mysql_select_db('my_db'); mysql_query("set names 'utf8'"); //select 数据库之后加多这一句 添加了上面的一句,服务端全都搞定。 客户端只需要指定UTF8或者set names utf8,就都不乱码了。 用Delphi、C#、C++测试之后,都正常了。 这仅仅是出现在多字符或者多字符集的情况下,例如混合了中英文,简繁体之类的网页或者应用。 纯英文无此问题。 当然,还有一项比较大的工程要做,就是把数据库里面原来的内容,统统转码一次才行。 现在已经完全正常了。结贴。
kenwee 2014-11-25
  • 打赏
  • 举报
回复
set names gbk也无法解决问题。这才是最郁闷的。
kenwee 2014-11-25
  • 打赏
  • 举报
回复
上传一下系统的一些设置截图。




另,测试机器为英文Windows8.1企业版64位,所有区域选项都设置为中国或中文。
zrygo 2014-11-25
  • 打赏
  • 举报
回复
ZeosLib没用过 UniDac连MySQL设置UTF8,显示中文没问题

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧