emoji无法插入数据库问题

1.问题描述

在向数据库插入emoji表情时,会看到这样的错误

Incorrect string value: ‘\xF0\x9F\x98\x81’ for column ‘username’ at row 1

2.问题原因

我们平时在用数据库时一般默认的字符集格式设的是utf8格式,utf8在MySQL中是用3个字节表示的,但一般的emoji表情需要4个字节表示,这在插入时自然会发生错误。

3.解决办法

以MySQL数据库为例

1.windows下解决办法

I.先登录MySQL,查看当前的编码格式

输入指令

show variables like ‘char%’;

emoji无法插入数据库问题_第1张图片

我们看到MySQL列出了当前的字符集:

character_set_client为客户端编码方式;
character_set_connection为建立连接使用的编码;
character_set_database为数据库的编码;
character_set_results为结果集的编码;
character_set_server为数据库服务器的编码;
只要把这5个编码方式改成utf8mb4,就不会出现乱码问题

输入指令

show variables like ‘collation_%’;

emoji无法插入数据库问题_第2张图片

列出了排序规则,对于排序规则的作用可以移步MySQL字符集与排序规则

II.修改my.ini文件

my.ini文件默认是在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini目录下
打开my.ini文件,修改
[client]节点
default-character-set=utf8mb4(增加)

[mysql]节点
default-character-set=utf8mb4(修改)

[mysqld]节点
init-connect=’SET NAMES utf8mb4’(增加)
character_set_server=utf8mb4 (修改)

修改完毕后保存,如果保存是提示没有权限请看这篇Windows下获取文件权限

III.重启MySQL

先关闭服务,开始->运行->net stop mysql
然后再开启,开始->运行->net start mysql
也可以在任务管理器中操作
任务管理器->服务->MySQL->右击->重启服务
emoji无法插入数据库问题_第3张图片

IV.查看修改结果

emoji无法插入数据库问题_第4张图片

emoji无法插入数据库问题_第5张图片

V.确认数据库、表、字段的字符集是否正确

emoji无法插入数据库问题_第6张图片

emoji无法插入数据库问题_第7张图片

emoji无法插入数据库问题_第8张图片

VI.插入Emoji表情到数据库测试

2.linux下解决办法

I.修改my.cnf vi /etc/my.cnf

[mysqld]
character-set-server=utf8mb4

[mysql]
default-character-set=utf8mb4

II.修改后重启Mysql

III.登录MySQL

修改环境变量,将以下都修改成utf8mb4

1、set character_set_client = utf8mb4;

2、set character_set_connection = utf8mb4;

3、set character_set_database = utf8mb4;

4、set character_set_results = utf8mb4;

5、set character_set_server = utf8mb4;

IV.将表和字段转化为utf8mb4格式

ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;(修改表字符集)

ALTER TABLE TABLE_NAMEMODIFY COLUMN COLUMN_NAME text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;(修改字段字符集)
V.插入emoji数据测试

你可能感兴趣的:(编程心得)