文章内容

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;

其它相关推荐:

1、MySQL emoji 表情

2、数据库读取数据❓

3、1366, "Incorrect string value: '\\xE9\\xBB\\x84\\xE5\\x85\\xB5' for column 'fullname' at row 1"

4、(1366, "Incorrect string value: '\\xE5\\xBB\\xBA\\xE7\\xAD\\x91...' for column 'classification_name' at row 1") 最近在向MySQ

5、解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' for column 'name' at row 1的异常

分享到:

发表评论

评论列表