当使用mysql添加或者修改数据时,会出现下面的错误
Incorrect string value: '\xF0\x9F\x91\x93\xF0\x9F...' for column 'xxx' at row
一般来说,数据库数值utf8字符的时候,在存储普通字符串时是没有什么问题,但是当我们有特殊符号时(如emoji表情符号,以及转化成utf8格式需要4个字符所有字符),在存储的时候就会出现上面的错误.
在mysql里面utf8最长支付3个字符集,而某些unicode转成utf8,需要4个字符集,所以需要设定特殊的字符集,比如修改成utf8mb4
查看我们数据库的字符串
how variables like ‘char%’;
+————+—————————-+————————+———-+
| Charset | Description | Default collation | Maxlen |
+————+—————————-+————————+———-+
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
+————+—————————-+————————+———-+
看最后的maxlen是3,也就是最长只能存3个字符
解决办法
1.修改数据库字符集
2.修改表字符集
修改数据库字符集
1.修改数据库字符集
修改数据库字符集方法有2种,一种是命令修改,一种直接修改配置文件
修改mysql配置文件,设置默认字符集utf8mb4, 包括collation[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.用命令修改
use到当前的数据库中,修改字符集
mysql>use mydb
mysql>alter database mydb character set utf-8;
修改表字符集
ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4;