MySQL中使用utf8的列的字符串值不正确

时间:2016-01-28 06:10:20

标签: mysql unicode character-encoding collation latin1

在MySQL工作台上运行以下查询失败,错误的字符串值错误。

insert into mytable (key) values (0x8080808080) gives me below error:
Error Code: 1366. Incorrect string value: '\x80\x80\x80\x80\x80' for column      'key' at row 1

列数据类型定义为char(5),它使用表的默认字符集/排序规则,即“utf8 - default collat​​ion”。此查询无法在0x7F之上插入任何字符值。

我想了解为什么它无法插入高于0x7F的值。如果我将charset / collat​​ion类型更改为latin1_ _ ,它将正常工作,直到字符0xFF。

1 个答案:

答案 0 :(得分:1)

  

此查询无法在0x7F之上插入任何字符值。

无法在0x7F之上插入字节值。如果要插入字符 U + 0080,则必须将其编码为UTF-8序列0xC280。这些字节高于0x7F但会插入OK,因为它是一个有效的UTF-8序列。

任何编码都是如此; 0x8080也是Shift-JIS中无效的字节序列,因此如果您创建了一个存储在sjis中的字符串列,那么该值将失败。另一方面,latin1没有无效的字节序列,所以所有字节都会在那里工作。

但是如果你想存储任意字节而不关心字符和编码,你应该使用二进制排序规则(例如VARBINARY列类型)。