文章内容
2025/7/3 0:55:15,作 者: 黄兵
MySQL 插入 Emoji 表情符号出现错误
最近在向 MySQL 数据库插入包含 Emoji 表情符号(如 📌📅) 的字符串时出现了如下错误:
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1366, "Incorrect string value: '\\xF0\\x9F\\x93\\x8C \\xE5...' for column 'title' at row 1")
出现问题的原因:
你遇到的这个错误是因为你在插入 包含 Emoji 表情符号(如 📌📅) 的字符串时,MySQL 数据库的字符集 不支持 4 字节的 UTF-8 字符(如 Emoji),导致插入失败。
解决方案:
让 MySQL 支持 Emoji(4 字节 UTF-8)
🔧 方法一:将表和字段的字符集改为 utf8mb4
修改表的字符集为 utf8mb4:
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4(如果你只想改 title 字段):ALTER TABLE your_table_name MODIFY title VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
🔧 方法二:在数据库连接时指定 utf8mb4
在使用 SQLAlchemy + MySQLdb 的情况下,需要在数据库连接 URI 中添加 charset 参数:
# 示例 SQLAlchemy URI(使用 MySQLdb) mysql+mysqldb://user:password@localhost/dbname?charset=utf8mb4
如果你用的是 pymysql 驱动,也同样添加:
mysql+pymysql://user:password@localhost/dbname?charset=utf8mb4
⚠️ 注意事项
-
utf8在 MySQL 中其实只支持最多 3 字节,不能存 Emoji。真正的 4 字节 UTF-8 是utf8mb4。 -
插入 Emoji 的字段必须是
utf8mb4字符集,否则就报你看到的(1366, Incorrect string value)错误。 -
有时候你还需要修改 数据库默认字符集,以防新建的表继续使用
utf8:
ALTER DATABASE your_db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
其它相关推荐:
2、数据库读取数据❓
3、1366, "Incorrect string value: '\\xE9\\xBB\\x84\\xE5\\x85\\xB5' for column 'fullname' at row 1"
5、解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' for column 'name' at row 1的异常
评论列表