Django配置MySQL如何设置utf8mb4字符集解决charset参数报错
Django MySQL配置utf8mb4字符集报错解决
报错原因
该报错的核心原因是Django的MySQL后端不会将配置顶层的自定义参数透传给底层数据库驱动,所有驱动接收的连接参数必须放在OPTIONS字段下传递,直接在顶层写charset不会被识别。
另外你贴出的初始配置存在语法错误:'HOST'strong text: 'localhost'混入了多余的格式字符,会直接导致配置解析失败,需要先修正为'HOST': 'localhost'。
正确配置方法
将字符集参数写入OPTIONS字典即可,完整可用配置如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '{{projectName}}', 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'charset': 'utf8mb4', # 可选:初始化连接时设置SQL模式与排序规则,兼容emoji、特殊生僻字存储 'init_command': "SET sql_mode='STRICT_TRANS_TABLES', collation_connection='utf8mb4_unicode_ci'" } } }
配套调整项
仅修改Django配置无法完全生效,还需要同步调整数据库侧的字符集配置:
- 执行SQL修改数据库默认字符集:
ALTER DATABASE `{{projectName}}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 对已经创建的数据表,批量或单表执行字符集转换:
ALTER TABLE `你的目标表名` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 确认使用的MySQL驱动版本满足要求:
mysqlclient 1.3.7+、PyMySQL 0.7+均原生支持utf8mb4字符集,版本过低请先升级驱动。 - Django 4.0及以上版本可省略
init_command中的排序规则配置,框架会根据指定的charset自动匹配对应排序规则。
内容的提问来源于stack exchange,提问作者Baba Fakruddin Shaik
相关产品推荐
相关产品推荐

