Django个人博客搭建教程---解决Mysql无法存储emoji

问题描述:

在博客文章中存储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都是兼容的

发布了214 篇原创文章 · 获赞 72 · 访问量 152万+

猜你喜欢

转载自blog.csdn.net/ssjdoudou/article/details/103936472