不知何故,MySQL数据库中的数据已经从Unicode转换为ANSI,并导致系统中的许多符号显示不正确。
符号现在显示如下:
我想将其转换回Unicode ...
我试过了:
这些方法没有成功......它们似乎只是保留我的数据,但未来任何使用符号的尝试都可以正常工作。
我想将这些现有的误解转换回原来的形式!
来自DB的示例文本的十六进制输出。
SELECT hex(name) FROM table_name where id = 17;
相当于:SELECT hex('☼STICKY☼');
输出:C3A2CB9CC2BC535449434B59C3A2CB9CC2BC
答案 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 ;;解码它需要两个步骤。