Python中含UTF8字符的字典存入MySQL时中文转义问题求助
解决MySQL插入JSON时中文变成Unicode转义序列的问题
嘿,这个坑我之前踩过!你遇到的问题本质是json.dumps()的默认行为在搞鬼——它默认会把所有非ASCII字符转换成\uXXXX这种Unicode转义序列,而不是直接输出UTF-8编码的中文。咱们来一步步搞定:
核心解决方案:修改json.dumps()的参数
给json.dumps()加上ensure_ascii=False参数,就能让它保留原始的中文字符,而不是转义成Unicode编码:
mydict = {u"名字": u"小明", "sex": "male"} # 关键:添加ensure_ascii=False禁用转义 mydict_str = json.dumps(mydict, ensure_ascii=False) stmt = """INSERT INTO test (id, params) VALUES (%s, %s)""" cursor.execute(stmt, (1001, mydict_str)) conn.commit()
针对Python 2的额外注意点
如果你用的是Python 2,json.dumps(..., ensure_ascii=False)返回的是unicode类型字符串,直接传给数据库可能会有编码问题,记得再转成UTF-8编码的字节串:
# Python 2 环境下需要额外编码 mydict_str = json.dumps(mydict, ensure_ascii=False).encode('utf-8')
确保数据库端的字符集配置正确
光改代码还不够,得保证数据库连接和表字段的字符集都支持UTF-8(推荐用utf8mb4,它是MySQL真正的UTF-8,支持emoji等全Unicode字符):
- 初始化连接时指定字符集:
# Python 2 使用 MySQLdb 库 conn = MySQLdb.connect( host='你的主机', user='用户名', passwd='密码', db='数据库名', charset='utf8mb4' # 这里指定utf8mb4 ) # Python 3 使用 pymysql 库 conn = pymysql.connect( host='你的主机', user='用户名', password='密码', db='数据库名', charset='utf8mb4' )
- 表字段的字符集设置
确保params字段的类型是TEXT/LONGTEXT,并且字符集设为utf8mb4,比如建表语句:
CREATE TABLE test ( id INT PRIMARY KEY, params LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci );
这样操作之后,再插入数据,数据库里的params字段就会显示{"名字": "小明", "sex": "male"}啦!
内容的提问来源于stack exchange,提问作者Spike
相关产品推荐
相关产品推荐

