我尝试了很多方法将MySQL
列中的utf8_unicode_ci
值从utf8_unicode_ci
转换为shift_jis
,但都没有解决。
原始列值在shift_jis
中,并且在使用新主机时进行了转换。现在这个价值看起来很垃圾,但它在网站前端表现得很好。
表列值为:ƒEƒCƒ“ƒhEƒŠƒ“ƒO
表列和CCD_ 7是字符集。
我试过这个mb_convert_encoding($str, "SJIS", "UTF-8");
和许多其他的,但它没有转换回来。有什么有价值的解决方案吗?
首先,通过执行来确定表中真正的内容
SELECT col, HEX(col) ...
如果是utf8,那么十六进制应该是3字节集,如片假名和平假名字符的E38xyy
。如果没有,那么你可能已经有圣犹达了。(或其他什么)
假设表列显示
col VARCHAR(...) ... CHARACTER SET utf8 -- (or utf8mb4)
然后你可以通过获得一个SELECT
来转换为SJIS
mysqli_charset('sjis');
mysqli_query( ... )
相反,如果您需要将表从utf8转换为sgis,请执行类似的操作
ALTER TABLE tbl CONVERT TO CHARACTER SET sjis;
这将把tbl
中的所有列以及这些列中的所有数据转换为指定的字符集。
请勿使用mb_*
或其他转换功能;这只会增加混乱。
ƒEƒCƒ“ƒhEƒŠƒ“ƒO
,如果被解释为latin1,则是十六进制834583438393836845838A8393834F
,如果被理解为sjis(或cp932),则是ウインドEリング
——这是你所期望的吗?
也就是说,ƒEƒCƒ“ƒhEƒŠƒ“ƒO
是sjis ウインドEリング
的Mojibake。Mojibake通常通过执行mysqli_charset
来修复,如上所述。