Mysql 字符集解码从 utf8_unicode_ci 到 shift jis
Mysql character set decoding from utf8_unicode_ci to shift jis
我尝试了很多方法将 MySQL
列中的 utf8_unicode_ci
值从 utf8_unicode_ci
转换为 shift_jis
但它没有得到修复。
原始列值在 shift_jis
中,并在使用新主机时进行了转换。现在这个值看起来很垃圾,但它在网站前端表现得很好。
table 列的值为:ƒEƒCƒ“ƒhEƒŠƒ“ƒO
table column and the character set
are character set.
我已经尝试过这个 mb_convert_encoding($str, "SJIS", "UTF-8");
和许多其他但它没有得到转换。
有什么有价值的解决方案吗?
首先,通过
确定 table 中的真实内容
SELECT col, HEX(col) ...
如果是utf8,那么对于片假名和平假名字符,十六进制应该是3字节集,如E38xyy
。如果没有,那么您可能已经在那里安装了 SJIS。 (或其他)
假设 table 列显示
col VARCHAR(...) ... CHARACTER SET utf8 -- (or utf8mb4)
然后你可以SELECT
通过
转换成SJIS
mysqli_charset('sjis');
mysqli_query( ... )
如果您需要将 table 从 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
来修复,如上所述。
我尝试了很多方法将 MySQL
列中的 utf8_unicode_ci
值从 utf8_unicode_ci
转换为 shift_jis
但它没有得到修复。
原始列值在 shift_jis
中,并在使用新主机时进行了转换。现在这个值看起来很垃圾,但它在网站前端表现得很好。
table 列的值为:ƒEƒCƒ“ƒhEƒŠƒ“ƒO
table column and the character set
are character set.
我已经尝试过这个 mb_convert_encoding($str, "SJIS", "UTF-8");
和许多其他但它没有得到转换。
有什么有价值的解决方案吗?
首先,通过
确定 table 中的真实内容SELECT col, HEX(col) ...
如果是utf8,那么对于片假名和平假名字符,十六进制应该是3字节集,如E38xyy
。如果没有,那么您可能已经在那里安装了 SJIS。 (或其他)
假设 table 列显示
col VARCHAR(...) ... CHARACTER SET utf8 -- (or utf8mb4)
然后你可以SELECT
通过
mysqli_charset('sjis');
mysqli_query( ... )
如果您需要将 table 从 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
来修复,如上所述。