解决Incorrect string value: ‘\xF0\x9F\x8C\xB8’ for column ‘nickName’ at row 1,mysql保存微信昵称nickName的表情出错

原因:
由于mysql默认编码为utf-8,最大只占3个字节,一些表情或者非常见字符,比如该例子中“xF0\x9F\x8C\xB8”占4个字节,这样往数据表里插入4个字节的数据就会出错。
解决办法:
将相应数据库和数据表的编码由utf8修改为utf8mb4。具体两者区别可以执行百度。
1.cd到 /etc/mysql/mysql.conf.d目录,修改目录下的mysqld.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使生效:

service mysql restart

这时我们在mysql命令行模式下使用命令【\s】就可以看到刚才设置的结果:

mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper

Connection id:          7
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          less
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.22-0ubuntu0.16.04.1 (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 2 hours 43 min 38 sec

Threads: 2  Questions: 114  Slow queries: 0  Opens: 193  Flush tables: 1  Open tables: 76  Queries per second avg: 0.011

3.修改数据库和数据表对应字段的编码格式(name自行替换):
(1)修改数据库编码方式

ALTER DATABASE name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改完可以使用如下命令查看修改结果:
show variables like 'character_set_database';

(2)修改数据表编码方式

ALTER TABLE name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改完可以使用如下命令查看修改数据表的结果:
show create table name

(3)修改数据表里字段的编码方式

事实上只要做到前两步就可以了
ALTER TABLE name CHANGE 'name' VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4.如果是使用Django等框架做数据库连接,注意还要在连接的配置文件中指定好编码格式,django的配置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #数据库引擎
        'NAME': '',# 数据库名,先前创建的
        'USER': '',#用户名
        'PASSWORD':'',
        'HOST':'127.0.0.1',
        'PORT':'3306',
        'CHARSET':'utf8mb4',				#特别注意这里
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34493908/article/details/83306584