MySQL - 将 ANSI 转换为 Unicode

标签 mysql unicode utf-8 character-encoding mojibake

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

符号现在显示如下:

  • --
  • -
  • ——
  • Ω
  • 等等

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

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

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

<小时/>

数据库示例文本的十六进制输出。

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

相当于:SELECT hex('“STICKY”);

输出:C3A2CB9CC2BC535449434B59C3A2CB9CC2BC

最佳答案

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

澄清一下,您可能正在查看 utf8(不是 unicode)与 latin1(不是 ANSI)。

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

但是,如果表中的数据被破坏,则该调用将无济于事。

(编辑 - 由OP添加到十六进制之后)

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”之前所期待的吗?你有“双重编码”;解码需要 2 个步骤。

关于MySQL - 将 ANSI 转换为 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592862/

相关文章:

unicode - 在格式化程序中打印Unicode

mysql - MySQL 中的 SQL 子查询

MySQL 按字段求和然后按用户分组?

mysql - Golang 将参数传递给 gorilla 路由器

mysql - 如何在sql中按子句使用avg

python - 使用 python 3 在终端中打印 unicode 字符

python - 用于在 python 中搜索视频的 Youtube API 中的 Unicode

java - URLDecoder 在 UTF-8 url 参数上给出意外值

javascript - 在 Javascript 中显示 unicode 字符(表情符号)

MySQL VARCHAR 长度和 UTF-8