SQLAlchemy连接MySQL的默认字符集及utf8mb4适配疑问
问题解答
1. SQLAlchemy连接MySQL的默认字符集
SQLAlchemy本身不直接定义默认字符集,实际依赖底层MySQL驱动(如pymysql)的默认行为。如果连接URL未指定charset参数,驱动通常会沿用MySQL服务器配置的默认字符集,但不同驱动可能存在细微差异。不过你的代码已经做了强制参数处理,这是核心影响因素。
2. 你的代码最终使用的字符集
看你给出的代码逻辑:
url = make_url(database_url) if 'charset' not in url.query: url = url.update_query_pairs([("charset", "utf8")]) create_engine(str(url))
只要原数据库URL里没有charset参数,代码就会强制添加charset=utf8。这里要明确一个关键细节:MySQL中的utf8实际上是utf8mb3,它仅支持最多3字节的Unicode字符,无法存储emoji这类4字节字符。
你在my.cnf里配置的客户端默认字符集,会被代码里明确指定的charset=utf8覆盖,所以最终SQLAlchemy引擎使用的连接字符集是utf8mb3,不是utf8mb4。
3. 改为utf8mb4的方法
要让引擎使用utf8mb4,只需修改代码里的字符集参数:
url = url.update_query_pairs([("charset", "utf8mb4")])
内容的提问来源于stack exchange,提问作者fergotin
相关产品推荐
相关产品推荐

