字符集转换SQL

时间:2018-08-15 19:28:03

标签: mysql phpmyadmin character-encoding character-set

我创建了一个存储中欧国家信息的数据库。我很难让这些国家/地区的字符集正确使用,因为它们有很多特殊字符。我知道“ iso-8859-2 Latin 2”字符集用于中欧国家,但是当我尝试更改数据库和表字符集设置(通过phpmyadmin)时,它似乎并没有完全删除“乱码”字符。”我一直在尝试遵循this link's guide来解决问题。

下面是数据库第一行的示例:

�esk� republik', 'CZ', '100 00', 'Praha 10-Stra�nice (?�st) x)', 
'Hlavn� m?sto Praha', 1)

Here is the whole MySQL dump file

非常感谢您的光临。

1 个答案:

答案 0 :(得分:1)

Github链接实际上是在谈论Mojibake,而不是“双重编码”。

您使用的是捷克字符,对吗?在该输出片段中,我看到了两个失败的地方:“带问号的黑色菱形”和“普通问号”。它们分别在Trouble with UTF-8 characters; what I see is not what I stored

中处理

但是,在尝试解决该问题之前,请弄清 client 中正在使用哪种编码。

黑钻石(�esk�

案例1(客户端使用的是latin2,而不是utf8`):

  • 要存储的字节未编码为utf8。如果可以更改此设置,请执行此操作。该链接假定这是目标,而不是latin2。需要进一步的研究来弄清楚如果客户确实需要latin2怎么办。
  • SET NAMESINSERT的连接(或SELECT)未设置为客户端的编码(latin2utf8或{{1} })。
  • 此外,检查数据库中的列是否为utf8mb4。 (是的,您可以将其存储为latin2,但是由于您需要修复问题,因此我们使用首选编码。)

情况2(原始字节为UTF-8):

  • CHARACTER SET utf8mb4的连接(或SET NAMES)不是utf8 / utf8mb4。解决这个问题。
  • 检查数据库中的列是否为SELECT(或utf8mb4)。

问号(普通的,不是黑钻石)(CHARACTER SET utf8):

  • 检查客户端编码(如上所述)
  • 数据库中的列不是CHARACTER SET utf8(或utf8mb4)。解决这个问题。 (使用m?sto。)

由于缺少SHOW CREATE TABLE,黑菱形往往只是浏览器的问题。当今大多数浏览器 都默认使用该设置,但可能会感到困惑。

请参阅链接,以使用<meta charset=UTF-8>调试已存储的内容。

SELECT col, HEX(col) ...

因此,我想您实际上是在使用CONVERT(CONVERT(CONVERT(BINARY('éáčďéěíňóřšťúůýž') USING utf8) USING latin1) USING utf8) --> '��??�?�?�?�?�?�� ,而不是latin1。运行

latin2

需要根据客户端中的编码设置这3个。