Python中Django + MySQL将utf8改为utf8mb4后执行manage.py报错怎么办?
这是 mysql 里的日志
这是我 settings.py 里的数据库配置
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘xxxx’,
‘USER’: ‘xxxxx’,
‘PASSWORD’: ‘xxxxx’,
‘HOST’: ‘localhost’,
‘PORT’: ‘3306’,
‘OPTIONS’:{
‘init_command’:“SET sql_mode=‘STRICT_TRANS_TABLES’”,
‘charset’:‘utf8mb4’,
},
}
}
不知道哪里有问题 ?
搞了一晚上有点头晕
再不行就得明天重装了
Python中Django + MySQL将utf8改为utf8mb4后执行manage.py报错怎么办?
看起来是不支持 mysql ? django 版本是啥?
遇到这个问题,通常是因为MySQL的utf8mb4字符集与Django的默认配置不匹配。报错信息里如果提到“Unknown character set”或类似内容,那就是关键。
你需要同时修改Django项目的数据库配置和数据表本身。光改Django设置没用,已有的表结构还是旧的。下面是完整的操作步骤和代码:
1. 修改Django数据库设置(settings.py)
在DATABASES配置的OPTIONS里,明确指定字符集:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_db_name',
'USER': 'your_user',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4', # 关键设置
}
}
}
2. 修改MySQL中已有数据库和表的字符集
登录MySQL命令行,执行以下SQL语句(将your_db_name替换为你的实际数据库名):
-- 修改数据库默认字符集
ALTER DATABASE your_db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 修改每张表的字符集
USE your_db_name;
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
如果表很多,可以导出整个数据库再重新导入,或者写个脚本来批量修改。
3. 处理迁移文件(如果使用了Django Migrations)
如果之前用utf8生成过迁移文件,可能需要手动修改相关迁移文件中的CharField、TextField等字段定义,确保它们没有硬编码collation。不过,通常只要完成前两步,运行python manage.py migrate就能正常工作。
4. 验证连接 可以在Django shell里快速检查:
python manage.py shell
>>> from django.db import connection
>>> print(connection.connection.charset) # 应该输出utf8mb4
常见坑点:
- 确保MySQL版本>=5.5.3,否则不支持
utf8mb4。 - 如果用了第三方库或特定字段类型,检查它们是否兼容
utf8mb4。 - 修改表字符集后,如果还有乱码或报错,检查连接器(如
mysqlclient或pymysql)版本是否过旧。
改完这些,再跑manage.py命令应该就没问题了。核心就两步:Django配置和MySQL表结构都要改对。
总结:同时修改Django配置和MySQL表字符集。
DATABASE 前加上
import pymysql
pymysql.install_as_MySQLdb()
试试?
只支持 postgres/oracle/sqlite3 ?啥版本的 Django ?
django1.11.12
django 1.11
还是不行,
我是用 yum 安装的 mysql5.6
我删了重装 mysql 试试。
你没有按 python 和 mysql 依赖包
试试 yum install MySQL-python
安装了这个了。
也运行了 pip install pymsql
还是不行。不知道是还少哪个包
第一步安装驱动:
pip install pymysql
注意你要是使用了虚拟环境一定要在激活之后再执行这条命令。
第二步启用驱动:
在项目的 settings.py 所在的那个目录中找到__init__.py
在前两行加下面两句
import pymysql
pymysql.install_as_MySQLdb()
问题还没到 MYSQL 呢,Python 的 mysql 驱动都还没有,怎么连。
去查一下 django mysql
单就错误信息来看,这事和数据库服务器那边没啥关系,所以你删除再重装 mysql 也不会有任何效果的
/usr/local/lib/python2.7/site-packags/django/db/backends/mysql/
看一下这个路径里有文件没
多谢各位
我用 centos 6.9 安装自带的 mysql5.1 版本。没有 pip install MySQL-python。
这样可以。
我在 centos6.9 上 把 mysql 升级到 5.6 得需要 pip install MySQL-python pymysql
于是通过下面:
pip install MySQL-python
假设错误发生,须要先安装一个开发包:
yum install python-devel
假设还是报错,执行:
yum install mysql-devel.x86_64
然后再执行 pip 命令安装 mysql-python
然后就可以了
现在也在由 utf8 改用 utf8mb4 数据库了
多谢各位
有 pymysql 的情况下就完全不依赖于 mysql-dev
这正是“其它 Linux 发行版”里面,dango 依赖 pymysql 而不依赖 mysql-python 的原因

