问题描述:
在博客文章中存储emoji时出现报错
InternalError at /admin/JiaBlog/articles/13/change/
(1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x8A\\x0D\\x0A...' for column 'body' at row 1")
问题解决:
1、修改/etc/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
init_connect='SET NAMES utf8mb4'
有则改之,无则加之
2、重启mysql
sudo /usr/local/mysql/support-files/mysql.server restart
3、我这里犯了个小错误,我为了改这个文件,设置了所有用户可改,结果启动时报警
mysql: [Warning] World-writable config file '/etc/my.cnf' is ignored.
大概意思是权限全局可写,任何一个用户都可以写。mysql担心这种文件被其他用户恶意修改,所以忽略掉这个配置文件。这样mysql无法重启。
4、修改my.cnf的权限
sudo chmod 644 /etc/my.cnf
5、再次重启mysql
Arithmetic@qingjiajiadeMBP bin % sudo /usr/local/mysql/support-files/mysql.server restart
Shutting down MySQL
... SUCCESS!
Starting MySQL
. SUCCESS!
6、mysql命令行检查编码
mysql> show variables like '%char%';
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.26-macos10.14-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.01 sec)
6、修改库、表
修改数据库 ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
修改表 ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
7、修改Django中settings.py文件
'default': {
'ENGINE': 'django.db.backends.mysql',
......
'OPTIONS': {'charset': 'utf8mb4'}
}
8、由于我把库删了,只能重建,我当然备份了
字符集选择utf8mb4
排序规则utf8mb4_unicode_ci
反正你再试试,不行就再把库和表都改一下,反正utf8和utf8mb4都是兼容的