MySQL 5.7 插入特殊符号和表情时出现 Incorrect string value 错误
Node.js ThinkJS 发布文章时有特殊符号和表情符号时,出现如下错误。
code: 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD',
errno: 1366,
sqlMessage: "Incorrect string value: '\\xF0\\x9F\\x87\\xA7\\xF0\\x9F...' for column 'content' at row 1",
sqlState: 'HY000',
index: 0,
ThinkJS 连接数据库配置时已经使用 utf8mb4,MySQL 数据库、表、字段都使用 utf8mb4 字符集和 utf8mb4_general_ci 排序规则,但还是出现问题。
更改数据库配置文件 my.cnf 添加如下配置,重启 MySQL 后问题还是不能解决。这也是网上常见的解决方法。
注意:为方便演示,仅写出新添加的配置项。
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
经过网上搜索,还需要在 [mysqld] 加上 skip-character-set-client-handshake=true
,重启后问题解决。
最终添加的配置如下:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake=true
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4