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 字符了。