【发布时间】:2016-03-12 12:52:09
【问题描述】:
我正在尝试了解 Latin1 和 UTF8 之间的区别,并且在大多数情况下我明白了,但是,在测试时我得到了一些奇怪的结果,并且可以使用一些帮助来澄清
我正在使用“é”(带有锐音的拉丁小写字母 E)进行测试,下面的链接显示了十六进制 c3a9
我建立了一个数据库并指定了utf8作为字符集,然后创建了一个以utf8作为字符集的表,并在将连接和客户端字符集设置为UTF8后插入了一条带有字符'é'的记录
当我从 test_table 中选择十六进制(字段)时,我得到:
十六进制(字段),字段 C3A9, é
这很好并且与我阅读的内容一致,但是,当我使用 latin1 字符集执行完全相同的操作时,我得到以下信息:
十六进制(字段),字段 C3A9, é
但如果我输入 char(x'E9') 这应该是 é 的单字节 Latin1 等效值,我设法使用“设置名称 UTF8”使其正确显示,但在设置与 Latin1 的连接和客户端
谁能澄清一下? - 在 UTF8 和 Latin1 中,Latin1 字符不应该是单字节(十六进制 E9)吗?还是我完全误解了这一切?
谢谢
【问题讨论】:
-
你能发一个
SHOW CREATE TABLE,这样我们就可以看到表格的字符集了。 -
另外,您如何查看这些结果?如果我在选择 hex("é"); 时将终端设置为 ISO-8859-1;我得到E9。当它设置为 UTF-8 时,我得到 C3A9。
-
mysql> 显示创建表 test_latin\G ****************************** 1. 行 **** *********************** 表:test_latin 创建表:CREATE TABLE
test_latin(avarchar(500) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET =latin1 -
我一直在使用 Mysql Workbench,但我尝试使用终端并在 latin1 和 utf8 之间切换并查看您报告的内容