MySQL中UTF-8文本无法识别的解决方法

MySQL 中 utf8_general_ci 使用 3 个字节表示 utf8 字符。但某些特殊的 utf8 字符需要占用 4 个字节,保存到 MySQL 中会发生如下错误:

sqlalchemy.exc.DatabaseError: (mysql.connector.errors.DatabaseError) 1366 (HY000): Incorrect string value: '\xF0\x9F\x8C\xB9\xE7\x8E...' for column 'content' at row 1 ...

MySQL 5.5 及后续版本,添加对 4 位 utf8 字符的支持,需要将表格的编码方式改为 utf8mb4,同时在执行SQL语句前,需要将服务器和客户端的编码也同样改为 utf8mb4。 可以通过执行下面的 SQL 语句修改编码:

SET NAMES utf8mb4

当使用 SQLAlchemy 时,连接数据库时将 chartset 设为 utf8 即可,在执行数据操作前,先要执行上面的 SQL 语句:

session.execute('SET NAMES utf8mb4')

这样就可以正常识别 UTF-8 字符了。