使用SQLAlchemy与MySQL-Python设置charset=utf8mb4时遇初始化错误如何解决?
解决SQLAlchemy + MySQL-Python连接utf8mb4报错的问题
这个问题我之前也碰到过,主要是因为你用的MySQL-Python(即mysqldb)1.2.5版本太老旧,对utf8mb4字符集的支持不完善,再加上可能MySQL的字符集配置没匹配到位导致的。给你两个解决方案,优先推荐第一个:
方案一:替换为PyMySQL驱动(更推荐)
MySQL-Python已经停止维护多年了,PyMySQL是纯Python实现的MySQL驱动,对utf8mb4支持更好,操作也简单:
- 先卸载旧的MySQL-Python:
pip uninstall MySQL-Python
- 安装PyMySQL:
pip install pymysql
- 修改你的SQLAlchemy连接字符串,换成
mysql+pymysql驱动:
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/tianchi?charset=utf8mb4')
这样基本就能解决问题,因为PyMySQL对utf8mb4的支持是原生的,不需要额外复杂配置。
方案二:修复MySQL-Python的配置(不推荐,仅作备用)
如果你必须保留MySQL-Python,那需要先确保MySQL的配置文件设置正确:
- 找到MySQL的配置文件(Windows下是
my.ini,通常在MySQL安装目录或C:\ProgramData\MySQL\MySQL Server 5.7\my.ini路径下) - 修改以下几个部分:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
- 重启MySQL服务,然后再尝试用原来的连接字符串连接。
不过要注意,即使配置了MySQL,MySQL-Python 1.2.5本身对utf8mb4的支持还是有局限性,比如某些特殊字符的处理可能会出问题,所以还是优先建议换成PyMySQL。
内容的提问来源于stack exchange,提问作者hyjal
相关产品推荐
相关产品推荐

