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

标签: Node.js, ThinkJS, MySQL