Django项目中有一个Mysql数据表字段存储的是用户评论, 使用了系统默认的设置,导致用户提交文本中如果包含了emoji, 就会报错.
报错内容为:1
django.db.utils.DataError: (1366, "Incorrect string value: '\\xF0\\x9F\\x90\\x82\\xE7\\x89...' for column 'content' at row 1")
原因是由于使用默认的数据库设置UTF-8, Mysql只支持三个字节的值. 但是emoji是4个字节.
解决办法:
将存储改内容的字段设置为uft8mb4
1
ALTER TABLE table_name MODIFY colum_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
设置表的字符集
1
ALTER TABLE table_name CHARSET=utf8mb4;
设置数据库字符集(可选)
1
SET NAMES utf8mb4;
django配置更改
1
2
3
4
5
6
7
8
9
10
11
12
13# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxxxxx',
'USER': 'xxxxx',
'PASSWORD': 'xxxxx',
'HOST': '127.0.0.1',
'PORT': 3306,
'CONN_MAX_AGE': 180,
'OPTIONS': {'charset': 'utf8mb4'},
}
}