在mysql数据库中插入Emoji表情以及插入后显示为???的解决办法

无法插入表情是因为utf-8保存2-3个字节,而Emoji表情需要四个字节,解决办法大致有两个:1,使用正则表达式替换Emoji,2,修改mysql字符编码为utf8mb4。这里主要介绍第二种方法。

注意:utf8mb4是向下兼容utf8的,所以不必担心修改编码后会对原来的数据造成影响。

一 修改数据库,表,字段的编码为utf8mb4

这个方法网上一堆,就不做过多介绍,修改命令为:

ALTER DATABASE数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

同时Java连接数据库时不要添加characterEncoding字段.

大部分人在做了上述操作后就以为完事了,可是他们发现Emoji表情的确可以插入,但是在数据库里面显示为????,甚至中文也无法显示了。下面请看正文。

二 正文

1 修改数据库配置文件

        第一步操作使你可以保存Emoji,但是它在数据库保存的编码格式为utf8mb4,然而你查看数据库或者从数据库取数据时,数据库给你的还是utf8格式,utf8是不兼容utf8mb4的,所以你看到和得到的是一堆问号,那么怎么改变呢,这就需要我们修改一下数据库的配置文件,让它输出utf8mb4格式的数据。

1.打开数据库配置文件(centos在/etc/my.cnf,win自己百度),加入下面文字:

[client]

# 客户端来源数据的默认字符集

default-character-set= utf8mb4

[mysqld]

# 服务端默认字符集

character-set-server=utf8mb4

# 连接层默认字符集

collation-server=utf8mb4_unicode_ci

[mysql]

# 数据库默认字符集

default-character-set= utf8mb4

文字来源:xiezefan.me/2015/02/03/mysql-utf8mb4/

同时,原文中有另外一种不用修改mysql的解决办法,也可以看看。

保存文件并退出,然后重启mysql。

2 重启mysql:

为什么我把重启mysql单独写呢?因为这是我在本次经历中遇到的最大的坑。

我保存完配置文件后去重启mysql,可是我试了下面所有命令也不能重启mysql:

etc/init.d/mysqld restart

systemctl restart mysql

service mysql restart

我检查了几遍都没有发现我的命令有什么错误,可是就是不能重启mysql,

这个时候我去查看我的mysql的版本,发现了如下提示:

5.5.44-MariaDB-log

这个MariaDB是什么玩意?

我查了百度,百度说“MariaDB数据库管理系统是MySQL的一个分支”,是开源社区为了避免甲骨文公司将mysql闭源的风险而采取的措施,

所以在linux下mysql其实是MariaDB(方便解释而已,他们并不是一个东西),所以在linux下重启mysql的命令为:

systemctl restart mariadb

好吧,请原谅我是一个小白,写这些就是为了给自己以及别人一个提示,以及记录自己成长的路。

你可能感兴趣的:(在mysql数据库中插入Emoji表情以及插入后显示为???的解决办法)