【问题标题】:How to resolve an incorrect string value error (MySQL)如何解决不正确的字符串值错误(MySQL)
【发布时间】:2017-01-17 01:46:47
【问题描述】:

我有一些文档,格式为 XML。我想将它们的内容(原始文本,保留格式)存储在 SQL 表中的单元格中,如LONGTEXT,以便我可以简单地获取单元格的值并稍后将其加载到网页中。我正在通过 MySQL Workbench 执行此操作。

但是,当我尝试将添加项应用到我的表时,我收到错误 1366: Incorrect string value: \xE2\x80\xAF1, ...

我尝试将字符集更改为 utf-8-general-cicp1251,但我不断收到相同的错误。

另外,我在 XML 文件中搜索了字符串 \xE2\x80\xAF1,但它甚至不在文件中。

有人知道这个字符串是什么吗?

XML 文件只有 219KB,所以我认为它应该(非常)容易放入 LONGTEXT 条目中。

XML 是否使用了任何可能导致此错误的字符?

我是否遗漏了另一个错误原因?

【问题讨论】:

  • 您可能不会在文件中看到文字 \xE2。这是二进制值的文本表示。你的 XML UTF-8 干净吗?你的专栏是连接UTF-8的吗?
  • 可能重复;考虑检查此answer 以获得快速解决方案。

标签: mysql xml utf-8


【解决方案1】:

您的代码不是文字文本,而是指向NARROW NO-BREAK SPACE

使用 UTF-8 简单字符编码为一个字节,其他字符需要两个字节。

还有一些字符需要三个字节。这些字符往往会导致此类错误。

在此处查找相关问题:freebcp: "Unicode data is odd byte size for column. Should be even byte size"

【讨论】:

  • 该链接无关紧要,因为它谈论的是 SQL Server,而不是 MySQL。正如你所说,E280AF 是一个 utf8 字符。 Unicode 会将其编码为十六进制 202F。此外,utf8 characters 可以大到 4 个 bytes。在 MySQL 中,这需要CHARACTER SET utf8mb4。亚洲大部分地区需要 3 字节的 utf8;中文需要一些 4 字节的字符。
【解决方案2】:

你需要

  • 为从您的客户端 (Workbench) 建立的连接指定 utf8(或 utf8mb4)。
  • 将相关列声明为CHARACTER SET utf8(或utf8mb4)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2012-11-08
    • 2017-03-18
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2015-02-28
    相关资源
    最近更新 更多