Illegal mix of collations错误解决方法
报错pymysql.err.OperationalError: (1267, “Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’”)是因为字符集编码问题(数据库出现了两种字符集)导致的;
解决办法(亲测有效):
1、修改django的settings.py配置
增加一行:‘OPTIONS’: {‘charset’:‘utf8mb4’},改完后重启应用
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_test',
'USER': 'root',
'PASSWORD': '123456789',
'HOST': '127.0.0.1',
'PORT': '3306',
# 增加配置
'OPTIONS': {'charset':'utf8mb4'},
}
}
2、修改数据库
database_name为数据库的名称,自行修改
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
3、修改表
table_name为表的名称,自行修改
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4、修改字段(非必需)
一般来说,晚上上述3步就能解决大部分问题,因为一般修改表的时候,字段也会随之修改,但是如果还有问题需检查字段的字符集和校对规则;也可以使用下列命令修改;
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;