如何修改MySQL默认字符集?解决Python插入Emoji报错问题
解决Python插入Emoji到MySQL时的字符编码错误
问题根源
MySQL原生的utf8编码仅支持3字节字符,而Emoji属于4字节的Unicode字符,因此插入时会触发1366 (HY000)错误。你在MySQL控制台能正常执行插入,是因为控制台连接默认使用了支持4字节的utf8mb4编码,而Python的mysql.connector默认连接字符集未适配。
修改MySQL默认字符集的步骤
通过修改MySQL全局配置,让所有新连接默认使用utf8mb4,无需在Python代码中额外指定collation:
编辑MySQL配置文件
根据操作系统找到对应的配置文件:- Linux:
/etc/my.cnf或/etc/mysql/my.cnf - Windows:MySQL安装目录下的
my.ini
在配置文件中添加/修改以下内容:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci [client] default-character-set=utf8mb4- Linux:
重启MySQL服务
- Linux执行命令:
sudo systemctl restart mysql - Windows通过服务管理器重启,或执行命令:
net stop mysql && net start mysql
- Linux执行命令:
验证全局字符集配置
登录MySQL控制台,执行以下SQL确认配置生效:SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';需确保以下参数值为
utf8mb4或对应排序规则:character_set_server=utf8mb4character_set_client=utf8mb4character_set_connection=utf8mb4character_set_results=utf8mb4collation_server=utf8mb4_general_ci
更新现有数据库和表的字符集
全局配置仅对新创建的数据库/表生效,需手动更新已有资源:- 修改数据库字符集:
ALTER DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; - 修改表及所有字段的字符集:
ALTER TABLE nice CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 修改数据库字符集:
完成以上操作后,Python连接MySQL时会自动使用utf8mb4编码,无需在连接配置中额外添加collation参数,即可正常插入含Emoji的文本。
内容的提问来源于stack exchange,提问作者user9102437
相关产品推荐
相关产品推荐

