MySQL - 将ANSI转换为Unicode

时间:2015-02-18 20:04:11

标签: mysql unicode utf-8 character-encoding mojibake

不知何故,MySQL数据库中的数据已经从Unicode转换为ANSI,并导致系统中的许多符号显示不正确。

符号现在显示如下:

  • €“
  • •
  • Î

我想将其转换回Unicode ...
我试过了:

  • 将数据库重新导入为UTF8字符集
  • 使用Notepad ++“转换为UTF8 ...”
  • 将默认字符集UTF8添加到Apache配置...
  • 一个PHP脚本,它接收所有数据库和表,复制它们,转换数据,然后重新创建原始数据库。

这些方法没有成功......它们似乎只是保留我的数据,但未来任何使用符号的尝试都可以正常工作。
我想将这些现有的误解转换回原来的形式!


来自DB的示例文本的十六进制输出。

SELECT hex(name) FROM table_name where id = 17;

相当于:SELECT hex('☼STICKY☼');

输出:C3A2CB9CC2BC535449434B59C3A2CB9CC2BC

1 个答案:

答案 0 :(得分:1)

您显示的输出看起来有点像#34;双重编码"并在http://mysql.rjweb.org/doc.php/charcoll中进行了讨论。请将一些文本转换为十六进制以进行确认。

澄清一下,你可能会看到utf8(不是unicode)与latin1(不是ANSI)。

@Tomas M - 在PHP中,mysqli_set_charset('utf8')是正确的调用,而不是SET NAMES utf8。

但是,如果数据在表格中被破坏,那么该呼叫将无济于事。

(编辑 - 由OP在HEX之后添加)

mysql> SELECT hex(convert(convert(unhex('C3A2CB9CC2BC') using utf8) using latin1));
+----------------------------------------------------------------------+
| hex(convert(convert(unhex('C3A2CB9CC2BC') using utf8) using latin1)) |
+----------------------------------------------------------------------+
| E298BC                                                               |
+----------------------------------------------------------------------+
mysql> SELECT unhex('E298BC');
+-----------------+
| unhex('E298BC') |
+-----------------+
| ☼               |
+-----------------+

是'☼'你之前期待的是什么' STICKY'?你有"双重编码&#34 ;;解码它需要两个步骤。