php - mysql字符集从utf8_unicode_ci解码到shift jis

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

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

原始列值在 shift_jis 中,并在使用新主机时进行转换。现在这个值看起来很垃圾,但它在网站前端表现得很好。

表列值是:ƒEƒCƒ“ƒhEƒŠƒ“ƒO table column 字符集character set .

我已经尝试过这个 mb_convert_encoding($str, "SJIS", "UTF-8"); 和许多其他但它没有得到转换回来。 有什么有值(value)的解决方案吗?

最佳答案

首先,通过做确定表中真正的内容

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 来修复,如上所述。

关于php - mysql字符集从utf8_unicode_ci解码到shift jis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285944/

相关文章:

mysql 返回多行

PHP SQL 子字符串和过程值

mysql - 如何使用 LEFT JOIN 修复此 sql?

php - mysqli_fetch_array在已部署的服务器上不起作用

php - PDO 相当于 : while ($row = mysqli_fetch_array($result))

php - 用于获取 Google for Business 的所有评论和评级的 API

php - MySQL PHP插入两个表事务

php - 我需要按字符串排序,但考虑的字符串位于两个 "/"之间或两个 "-"之间,该怎么做

php - jquery中点击刷新页面如何显示之前的结果?

具有可变数量参数的 PHP 工厂类