UTF8 character_set_server和DataTables插件

时间:2015-04-02 17:02:14

标签: php jquery mysql utf-8 datatables

我的UTF8数据看起来很糟糕,使用Windows软件连接到数据库并查看数据。 虽然我的PHP脚本功能很好(包括读写)。

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

从我可以收集到的唯一区别是character_set_server是latin1而在我的本地服务器上是utf8

| character_set_client     | utf8                                   |
| character_set_connection | utf8                                   |
| character_set_database   | utf8                                   |
| character_set_filesystem | binary                                 |
| character_set_results    | utf8                                   |
| character_set_server     | latin1                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/share/mysql/charsets/             |

我可以通过发出一个SET NAMES UTF8来解决这个问题,它将数据正确地编码到服务器中。

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

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

1 个答案:

答案 0 :(得分:0)

鉴于£25已存储为HEX C382 C2A3 32 35,您可以使用"双重编码"我在my blog中讨论的问题。

可能发生的事情是你在插入时用£25编码的utf8(十六进制:C2A3 32 35; 32 35是' 25') 。但是你声明客户端正在使用latin1。 (这是许多情况下的默认设置,但这里错了。)同时,您将列声明为CHARACTER SET utf8。 (检查点:我的分析听起来是否正确?)

所以,MySQL信任你所说的内容,并将C2 A3 32 35转换为将其作为latin1转换为utf8。 latin1 C2变为utf8 C382而latin1 A3变为utf8 C2A3。 (25没有改变;两个字符集中的编码相同。)

如果您在客户端错误地声明latin1时将其读回,则步骤将被撤消,并且您不会知道任何错误。但是,显然,你的第二个客户被宣布不同。 (检查点:这听起来不错吗?)

您应该修复插入错误的客户端,并且应该修复数据。这是两个独立的任务,应该基本上同时完成。博客解释了它,但可能不容易梳理。你现在想做什么?