【问题标题】:Avoiding mysql General error: 1366 Incorrect string value避免 mysql 一般错误:1366 Incorrect string value
【发布时间】:2014-09-11 22:39:44
【问题描述】:

在我的数据库中插入一个值时出现 mysql 错误:

General error: 1366 Incorrect string value: '\xE4ngen....' for ....

我正在使用带有 PDO 的 zend 框架 1.10,我尝试插入的数据是从 UTF8 格式的 XML 文件中解析出来的。 Mysql 是 5.6.14。

我还检查了我的 mysql 数据库、表和列排序规则,它们是:

  • 数据库:latin1_general_ci
  • 表:utf8_unicode_ci
  • 列:utf8_unicode_ci

由于我的输入来自一个 XML 文件,我运行 iconv 来检查该文件是否为有效的 utf8: iconv -f UTF-8 file -o /dev/null 一切看起来都很好,但我不能真正信任这个 XML,因为它来自我无法控制的外部来源。

我真正想要的是一种安全的方法来处理这个问题,以便将数据导入 MySQL,以防万一一切都是 UTF8 好的,并且如果它有一些编码问题......我怎样才能做一个“防弹”如何在 PHP 中读取这些数据并插入到 mysql 中?

【问题讨论】:

  • 抛出异常是一种解决方案吗?还是您需要通过各种方式修复错误的编码?
  • 完全正确:我需要通过各种方式修复它。因为我不能相信来源不会犯错误,有些来源是好的,有些不是我真的必须对我的代码进行防弹,即使导入的数据出现“奇怪的字符”出现一些问题,它仍然更好与未导入数据的今天相比。
  • 好吧,那我不羡慕你。检测任意编码——然后正确地转换它们——非常有趣。

标签: php mysql zend-framework utf-8 character-encoding


【解决方案1】:

如果您不能相信输入是任何特定的字符编码,那么您几乎不得不将其视为任意二进制数据。将列转换为BLOBVARBINARYBINARY 数据类型。

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 2018-12-13
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多