mysql字符集解码从utf8_unicode_ci转移到jis

时间:2016-03-29 13:35:57

标签: php mysql mysqli character-encoding mysql-error-1064

我尝试了很多方法将utf8_unicode_ci列中的MySQL值从utf8_unicode_ci转换为shift_jis,但它没有得到修复。

原始列值位于shift_jis,并在使用新主机时进行转换。现在这个价值似乎很垃圾,但它在网站前端表现得很好。

表格列值为:ƒEƒCƒ“ƒhEƒŠƒ“ƒO table columncharacter setcharacter set

我已经尝试了这个mb_convert_encoding($str, "SJIS", "UTF-8");和其他许多但是它没有被转换回来。 任何有价值的解决方案?

1 个答案:

答案 0 :(得分:0)

首先,通过执行

确定表中的真实内容
SELECT col, HEX(col) ...

如果是utf8,则对于片假名和平假名字符,十六进制应为E38xyy的3字节集。如果没有,那么你可能已经有了SJIS。 (或其他)

假设表格列显示

col VARCHAR(...) ... CHARACTER SET utf8  -- (or utf8mb4)

然后你可以通过

获得SELECT转换为SJIS
mysqli_charset('sjis');
mysqli_query( ... )

相反,如果您需要将表格从utf8转换为sjis,请执行类似

的操作
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来修复。