Php UTF8字符集服务器和数据表插件

Php UTF8字符集服务器和数据表插件,php,jquery,mysql,utf-8,datatables,Php,Jquery,Mysql,Utf 8,Datatables,使用windows软件连接到数据库并查看数据时,我的UTF8数据看起来已损坏。 尽管我的PHP脚本功能很好(读写都可以) 我已经在本地主机上尝试了我的脚本,一切都很好,从客户端查看时也很好。但在共享主机服务器上,情况有所不同 据我所知,唯一的区别是字符集服务器是拉丁文1,而在我的本地服务器上是utf8 | character_set_client | utf8 | | character_set_connection |

使用windows软件连接到数据库并查看数据时,我的
UTF8
数据看起来已损坏。 尽管我的PHP脚本功能很好(读写都可以)

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

据我所知,唯一的区别是字符集服务器是拉丁文1,而在我的本地服务器上是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/ | |字符集客户机utf8| |字符集连接utf8| |字符集数据库utf8| |字符集文件系统二进制| |字符集结果utf8| |字符集服务器拉丁1| |字符集系统utf8| |character_sets_dir |/usr/share/mysql/charsets/| 我可以通过发出一个
SET NAMES UTF8
将数据正确编码到服务器中来解决这个问题

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


发生什么事了?如果我没有更改服务器设置的root访问权限,是否可以修复此问题?

鉴于
25
存储为十六进制
C382 C2A3 32 35
,您有我在中讨论的“双重编码”问题

可能发生的情况是,当您插入时,您使用utf8(十六进制:C2A3 32 35;32 35是'25')编码了
.25
。但你声明客户使用的是拉丁语1。(这是许多情况下的默认设置,但在这里是错误的。)同时,您将该列声明为
字符集utf8
。(检查点:我的分析听起来正确吗?)

因此,MySQL信任您所说的,并将
C2 A3 32 35
转换为utf8。拉丁语1
C2
变成了utf8
C382
,拉丁语1
A3
变成了utf8
C2A3
。(
2
5
没有更改;两个字符集中的编码相同。)

如果您在客户错误地声明为latin1的情况下重新阅读,步骤将颠倒,您将不知道有任何错误。但是,显然,您的第二个客户的声明不同。(检查点:听起来正确吗?)


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

首先,让我们决定数据是在输入时损坏还是在输出时损坏。请提供
SELECT col,HEX(col)…的输出。
从某个表中获取一些损坏的列。@Rick James“£25”HEX=C382C2A33235的值。是的,我认为您在双重编码点上是正确的。在我的第二个客户端上,我通过更改my.ini配置文件手动将服务器设置为处理UTF8。那么如何在有问题的服务器上解决这个问题呢?我只有3条记录需要UTF8,以便可以手动更改。我是否需要更改表或发出命令PHP命令来修复后续的插入/更新?我记得当我正确地执行操作并得到一个十六进制值C2A33235时,DataTables拒绝显示字段内容(无效的utf8数据)。手动更新行可能是最简单、最安全的方法。你知道他们应该说什么吗?字符串的大小是否可控?我确实使用了数据库,得到了正确的值,例如:25英镑=C2A33235,对吗?但是,当Datatables不显示任何字段时,它似乎只显示双编码字段。如果我可以更改字符集服务器,我想我可以解决这个问题。如果您得到截断的字符串(在这种情况下为空字符串),则可能在
set NAMES utf8
生效时插入了拉丁文1字节。如果您在
选择过程中可以看到/看不到字符串,我想在此提供更多详细信息。