UTF8 character_set_server和数据表插件


UTF8 character_set_server and DataTables plugin

我的UTF8数据看起来很混乱,使用Windows软件连接到数据库并查看数据。虽然我的PHP脚本运行良好(读取和写入(。

我已经在我的本地主机上尝试了我的脚本,一切都很棒,从客户端查看时看起来也很好。但是在共享主机服务器上,情况有所不同。

从我收集到的信息来看,唯一的区别是character_set_server是latin1而在我的本地服务器上它utf8

|character_set_client |UTF8 ||character_set_connection |UTF8 ||character_set_database |UTF8 ||character_set_filesystem |二进制 ||character_set_results |UTF8 ||character_set_server |拉丁语1 ||character_set_system |UTF8 ||character_sets_dir |/usr/share/mysql/charsets/|

我可以通过发出将数据正确编码到服务器中的SET NAMES UTF8来解决此问题。

但是这样做会导致DataTables Jquery插件无法显示该字段。根据作者的说法,如果字段格式不正确,它将不会显示UTF8

这是怎么回事?如果我没有 root 访问权限来更改服务器的设置,我可以解决此问题吗?

鉴于£25被存储为 HEX C382 C2A3 32 35 ,您有我在博客中讨论的"双重编码"问题。

可能发生的事情是,当您插入它时,您£25 utf8 编码(十六进制:C2A3 32 35;32 35 是"25"(。 但您声明客户端使用的是 latin1。 (在许多情况下,这是默认值,但此处是错误的。 同时,您已将列声明为CHARACTER SET utf8 。 (检查点:我的分析听起来正确吗?

因此,MySQL相信您所说的内容,并将C2 A3 32 35转换为latin1转换为utf8。 拉丁语1 C2成为UTF8 C382,拉丁语1 A3成为UTF8 C2A3。 (25没有更改;两个字符集中的编码相同。

如果你在客户端错误地声明 latin1 的情况下读回它,步骤将被颠倒,你不会知道有什么问题。 但是,显然,您的第二个客户端的声明方式不同。 (检查点:这听起来正确吗?

您应该修复错误

插入内容的客户端,并且应该修复数据。 这是两个独立的任务,基本上应该同时完成。 博客对此进行了解释,但可能不容易梳理出来。 此时你想做什么?