解决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',				#特别注意这里
    }
}

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值