这是一个存储在MySQL数据库中的示例字符串,在Linux服务器上运行:™
这是单个TM字符,在0x2122
中表示为UTF-16BE
,0xE284A2
表示为UTF-8
数据库表以utf8-unicode-ci
编码。我在另一台Linux服务器上运行PHP,它使用mb_internal_encoding
的内部编码(由ISO-8859-1
报告),它使用与UTF-8相同的字符编码。
当我运行SQL查询以获取字符串时,它返回0x0099
,这是Windows-1252
中的表示。
怎么会发生这种情况,如何修复它以返回更合理的代码页呢?
答案 0 :(得分:0)
您观察到的行为是由于默认的MySQL客户端字符集。
您可以覆盖默认值,并指定要用于客户端连接的字符集。如果您使用的是mysqli,请执行以下操作:
$mysqli->set_charset('utf8');
请参阅:
http://php.net/manual/en/mysqlinfo.concepts.charset.php
http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html