字符集转换sql

mwkjh3gx  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(303)

我创建了一个数据库,存储中欧国家信息。我真的很难让角色集适合这些国家,因为他们有这么多特殊的角色。我知道“iso-8859-2 latin 2”字符集用于中欧国家,但当我尝试更改数据库和表字符集设置(通过phpmyadmin)时,似乎并没有完全删除“乱码字符”。我一直在尝试按照此链接的指南来解决问题。
下面是数据库第一行的示例:

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

这是整个mysql转储文件
我非常感谢你抽出时间。

sigwle7e

sigwle7e1#

github链接实际上是在谈论mojibake,而不是“双重编码”。
你用的是捷克字符,对吗?我看到了输出片段中的两个缺陷:“带问号的黑钻石”和“普通问号”。故障时分别处理,utf-8字符;我看到的不是我储存的
但是,在尝试解决问题之前,先弄清楚客户端使用的是什么编码。
黑钻石( �esk� )
案例1(客户正在使用 latin2 ,而不是utf8): 要存储的字节不编码为utf8。如果你能改变这个,就这么做。链接假定这是目标,而不是拉丁语2。如果客户真的需要拉丁语,需要更多的研究才能弄清楚该怎么做。 连接(或SET NAMES)对于INSERT以及SELECT未设置为客户端的编码(latin2或者utf8或者utf8mb4). 另外,检查数据库中的列是否正确CHARACTER SET utf8mb4. (是的,您可以将其存储为latin2,但是由于您需要修复某些内容,所以我们使用首选编码。) 案例2(原始字节为utf-8): 连接(或SET NAMES)对于SELECT不是utf8/utf8mb4。修好这个。 检查数据库中的列是否正确CHARACTER SET utf8(或utf8mb4)。 问号(普通的,不是黑钻石)(m?sto): 检查客户端编码(如上所述) 数据库中的列不是字符集utf8(或utf8mb4)。修好这个(使用SHOW CREATE TABLE.) 黑钻石往往是一个浏览器唯一的问题,由于缺乏. 现在大多数浏览器默认这样做,但它们可能会感到困惑。 有关使用的信息,请参见链接SELECT col, HEX(col) ...` 用于调试存储的内容。

CONVERT(CONVERT(CONVERT(BINARY('éáčďéěíňóřšťúůýž') USING utf8) USING latin1) USING utf8) 
                           --> '��??�?�?�?�?�?��

所以,我猜你实际上 latin1 ,不是 latin2 . 运行

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin2                     | <--
| character_set_connection | latin2                     | <--
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | latin2                     | <--
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

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

相关问题