为什么PHP店的字符,如日本在MySQL表支持UTF8作为其他什么东西,但成功地从MySQL作为原始字符串读值回了呢?
如
$db = new mysqli("localhost", "user", "pwd", "test");
$sql = "INSERT INTO testtable(name) VALUES ('ボーナスエリア');
从工作台这已经插入到表ディション
我不知道该编码/映射如何或在什么水平发生。
在PHP中回读出导致正确的字符串ボーナスエリア
显示在网页上。 为什么和如何运作的?
UPDATE感谢到目前为止所有的评论。 不仅仅是好奇它实际上使我想插入从其他来源即其中的Java通过JDBC插入CJK字符正确字符的问题。 这会导致PHP读取这些退了出来,并显示为一个问题??????
任何人都可以证明什么编码转换成定中会出现什么分贝观众的角色?
更新2我的浏览器(它没有任何关系这一问题,因为值是????它显示之前)是Firefox浏览器的编码设置为西方ISO-8859-1。 我可以看到日文字符正确显示旁边????? 字符。 奇怪的是,出现的人物???? 在数据库浏览器中正确显示。
浏览器设置
网页片断
PHP将文本大多为任意的二进制数据。 这意味着,在这些情况下,它是很常见的两个错误,以相互抵消。
例如,如果你写ボーナスエリア
在源文件并将其保存为UTF-8,什么PHP看到的是字节\xe3\x83\x9c\xe3\x83\xbc...
,这就是它会与合作。 您可以将字符串传递到数据库客户端库,就像这里mysqli
,而且,如果你是幸运的,当你以后获取文本从数据库返回的客户端库将完全相同的字节返回PHP。 独立的数据库如何实际存储的数据。
什么似乎是这里发生的是数据库客户端库,用于根据latin1的,这意味着它解释字节来解释数据PHP双手把它\xe3\x83\x9c...
的人物デ...
,这就是将数据库存储。 当你读出的数据同样的事情发生了:在客户端获得字符デ...
从数据库中,并且因为它的设置编码它们的latin1,它会返回\xe3\x83\x9c...
到PHP。 这就解释了如何在数据库中变为乱码,但PHP应用程序仍然似乎很好地工作。
当然,这将是最好有数据库存储以可读格式的文本。 对于您必须设置客户端编码(见mysqli_set_charset )和数据库列的编码(见MySQL文档)向utf8
。
文章来源: PHP inserting Japanese string to utf8 table as something else, but still reads it successfully