这个问题困扰着该站点的参与者以及其他许多人。
您列出了五个主要的CHARACTER SET
麻烦案例。
展望未来,最好使用CHARACTER SET utf8mb4
和COLLATION utf8mb4_unicode_520_ci
。(管道中有更新版本的Unicode排序规则。)
utf8mb4
是的超集utf8
,它处理4字节utf8代码,表情符号和某些中文需要这些代码。
在MysqL之外,“ UTF-8”是指所有大小的编码,因此实际上与MysqL相同utf8mb4
,而不是utf8
。
在下文中,我将尝试使用这些拼写和大写字母来区分MysqL内部和外部。
有关计算机语言的更多详细信息(及其后续部分)
使用工具或工具查看数据SELECT
是不可信的。太多这样的客户端,尤其是浏览器,试图补偿不正确的编码,并向您显示正确的文本,即使数据库已损坏。因此,选择一个包含非英语文本的表和列,然后执行
SELECT col, HEX(col) FROM tbl WHERE ...
正确存储的UTF-8的十六进制将为
文字(Se
为Señor
):
与问号(Se?or
对Señor
); 存在以下情况之一:
情况1(原始字节 不是 UTF-8):
情况2(原始字节 为 UTF-8):
仅当浏览器设置为时,才会出现黑色菱形<Meta charset=UTF-8>
。
(常规的,不是黑钻石)(Se?or
用于Señor
):
(Señor
for Señor
):(此讨论也适用于 ,它不一定可见。)
如果数据看起来正确,但排序不正确,则说明您选择了错误的排序规则,或者没有适合您的排序规则,或者您使用 。
。
é should come back C3A9, but instead shows C383C2A9
The Emoji
解决方法
我试图使用UTF-8并遇到麻烦。
我尝试了很多事情;这是我得到的结果:
????
而不是亚洲字符。即使是欧洲文字,我也能Se?or
接受Señor
。
- 奇怪的乱码(变为乱码?),如
Señor
或新浪新闻
为新浪新闻
。
- 黑钻石,例如Seor。
- 最终,我陷入了数据丢失或至少被截断的情况:
Se
for Señor
。
- 即使我 看到 正确的文本,它也无法正确 排序 。
我究竟做错了什么?我该如何修复 代码 ?我可以恢复 数据 吗?
我试图使用UTF-8并遇到麻烦。
我尝试了很多事情;这是我得到的结果:
我究竟做错了什么?我该如何修复 代码 ?我可以恢复 数据 吗?