You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字符):

  1. 初始化连接时指定字符集:
# 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'
)
  1. 表字段的字符集设置
    确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:02