【问题标题】:Incorrect string value for column in MySQL with utf8MySQL 中带有 utf8 的列的字符串值不正确
【发布时间】:2016-01-28 06:10:20
【问题描述】:

在 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 - 默认排序规则”。此查询无法插入任何高于 0x7F 的字符值。

我想了解为什么它无法插入高于 0x7F 的值。如果我将字符集/排序规则类型更改为 latin1__,它可以正常工作,直到字符 0xFF。

【问题讨论】:

    标签: mysql unicode character-encoding collation latin1


    【解决方案1】:

    此查询未能插入任何高于 0x7F 的字符值。

    未能在 0x7F 以上插入 byte 值。如果您想插入 字符 U+0080,您必须将其编码为 UTF-8 序列 0xC280。这些字节高于 0x7F,但会插入 OK,因为它是有效的 UTF-8 序列。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 2017-09-04
      • 2014-11-09
      • 2012-12-11
      • 2014-10-27
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      相关资源
      最近更新 更多