代码之家  ›  专栏  ›  技术社区  ›  petekaner

MySQL 5.7上的MySQL错误字符串值错误,但5.5上没有

  •  3
  • petekaner  · 技术社区  · 7 年前

    在一个PHP应用程序中,我试图将电子邮件的内容保存在数据库中(表是utf8mb4,排序规则是utf8mb4\u general\u ci)。在我的开发环境中进行测试时,它运行良好,但在产品中,我不断出现以下错误:

    General error: 1366 Incorrect string value: '\xC7ALHO-...' for column 'content_html' at row 1
    

    我检查了一下,发现我在dev上安装了MySQL 5.5,在prod上安装了5.7,我在dev上升级了MySQL,现在在dev上也出现了错误。 问题是我不明白为什么我会出现这样的错误,内容是一封非常标准的电子邮件,只有标题标志。 你知道为什么这在5.7中失败而不是在5.5中吗?如果有任何解决方法?

    更新:下面是显示表格的完整列

    ysql> SHOW FULL COLUMNS FROM received_email;
    +-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
    | Field           | Type         | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
    +-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
    | id              | int(11)      | NULL               | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
    | skill_id        | int(11)      | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
    | agent_id        | int(11)      | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
    | message_id      | longtext     | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
    | received_date   | datetime     | NULL               | NO   |     | NULL    |                | select,insert,update,references |         |
    | downloaded_date | datetime     | NULL               | NO   |     | NULL    |                | select,insert,update,references |         |
    | from_name       | varchar(255) | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
    | from_email      | varchar(255) | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
    | subject         | longtext     | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
    | content_html    | longtext     | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
    | content_plain   | longtext     | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
    | recipient       | varchar(255) | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
    | created_at      | datetime     | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
    | updated_at      | datetime     | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
    | case_detail_id  | int(11)      | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
    +-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
    

    提前感谢

    2 回复  |  直到 7 年前
        1
  •  2
  •   shushu304    7 年前

    我认为这两件事你可以检查。。。

    1) 电子邮件内容字符集

    • 什么是电子邮件内容字符集。。。utf-8也是?

    • 如果没有,您是否尝试将其转换为utf-8?

    2) sql模式-MySql 5.5到5.7有一些默认更改

    您可以找到更多信息: - https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html - https://serverpilot.io/community/articles/how-to-disable-strict-mode-in-mysql-5-7.html

        2
  •  0
  •   Rick James    7 年前

    声明您的 客户 latin1 字节。在连接字符串中执行此操作,或稍后通过 SET NAMES latin1 .

    MySQL将转换 C7 到utf8等效“在导线上”。

    不要使用任何转换函数,这可能只会让事情变得更糟,或者至少更难解释。