原因:
之前将数据库的编码设置成utf8,当存入字母或中文字符时,都是3个直接.
而当用户的昵称存在emoji表情时,该表情对应的编码是4个直接,也就是utf8mb4格式.
解决办法:
1,进入mysql,执行命令
- SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
修改数据库,表,列的字符集.
修改Database字符集
- ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE utf8mb4_unicode_ci;
修改Table字符集
- ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改column字符集
- ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
上面的命令我没有打错,CHANGE后面跟两遍表名。
请不要单纯的复制粘贴,你可能需要修改数据库名,表名,列名和not null.
3,修改django连接数据库时的字符集
在django项目的setting文件中,你必须设置charset=utf8mb4,
数据库的配置模板如下:
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'example',
- 'USER': 'example',
- 'PASSWORD': 'example',
- 'HOST': '',
- 'PORT': '',
- 'OPTIONS': {'charset': 'utf8mb4'},
- }
- }
4,最后一步,不是必须的.但是强烈建议进行设置.
在/etc/mysql/my.cnf文件中,设置以下几项:
- [client]
- default-character-set = utf8mb4
- [mysql]
- default-character-set = utf8mb4
- [mysqld]
- character-set-client-handshake = FALSE
- character-set-server = utf8mb4
- collation-server = utf8mb4_unicode_ci
本文地址:https://www.lisen.me/use-django-to-save-emoji-expression-into-mysql.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!