在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 collation”。此查询无法在0x7F之上插入任何字符值。
我想了解为什么它无法插入高于0x7F的值。如果我将charset / collation类型更改为latin1_ _ ,它将正常工作,直到字符0xFF。
答案 0 :(得分:1)
此查询无法在0x7F之上插入任何字符值。
无法在0x7F之上插入字节值。如果要插入字符 U + 0080,则必须将其编码为UTF-8序列0xC280
。这些字节高于0x7F但会插入OK,因为它是一个有效的UTF-8序列。
任何编码都是如此; 0x8080
也是Shift-JIS中无效的字节序列,因此如果您创建了一个存储在sjis
中的字符串列,那么该值将失败。另一方面,latin1
没有无效的字节序列,所以所有字节都会在那里工作。
但是如果你想存储任意字节而不关心字符和编码,你应该使用二进制排序规则(例如VARBINARY
列类型)。