[英]How does a string returned from a SQL select statement get encoded?
这是一个示例字符串,存储在Linux服务器上的MySQL数据库中:
这就是单个TM字符,其被表示为0x2122
在UTF-16BE
,或0xE284A2
在UTF-8
数据库表以utf8-unicode-ci
编码。 我在另一台Linux服务器上运行PHP,该服务器使用ISO-8859-1
的内部编码(如mb_internal_encoding
所报告),该编码使用与UTF-8相同的字符编码。
当我运行SQL查询以获取字符串时,它将返回0x0099
,这是Windows-1252
表示形式。
那怎么会发生?如何解决它,以更合理的代码页返回?
您观察到的行为归因于默认的MySQL客户端字符集。
您可以覆盖默认值,并指定用于客户端连接的字符集。 如果您使用的是mysqli,请执行以下操作:
$mysqli->set_charset('utf8');
看到:
http://php.net/manual/zh/mysqlinfo.concepts.charset.php
http://dev.mysql.com/doc/refman/5.5/zh-CN/charset-connection.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.