MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)

一、基本原则

如果要实现存储 emoji 表情到 MySQL 实例,需要应用客户端、到 MySQL 实例的连接、MySQL 实例内部 3 个方面统一使用或者支持 utf8mb4 字符集。


否则会报Incorrect string value: ‘\xF0\x9F\x98\xAD",…’ for column ‘commentContent’ at row 1错误

解决方法

1. 修改mysql数据库的编码为uft8mb4

1.1. 低版本Mysql<5.5.3

没啥好办法,把字段类型改为 MEDIUMBLOB , 其他啥都不用改(继续保持数据库字符集和连接字符集都是utf8),问题解决。

mysql> show variables like ‘char%’; 
+————————–+—————————-+ 
| Variable_name | Value | 
+————————–+—————————-+ 
| character_set_client | utf8 | 
| character_set_connection | utf8 | 
| character_set_database | utf8 | 
| character_set_filesystem | binary | 
| character_set_results | utf8 | 
| character_set_server | utf8 | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/share/mysql/charsets/ | 
+————————–+—————————-+ 这个状态下 MEDIUMBLOB 就能搞定。
1.2. MySQl>=5.5.3可以不用像上面那么做
1.2.1. 修改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’
1.2.2. 重启,确认上述配置生效
mysql> SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’; 
+————————————-+——————————+ 
| Variable_name | Value | 
+————————————-+——————————+ 
| character_set_client | utf8mb4 | 
| character_set_connection | utf8mb4 | 
| character_set_database | utf8mb4 | 
| character_set_filesystem | binary | 
| character_set_results | utf8mb4 | 
| character_set_server | utf8mb4 | 
| character_set_system | utf8 | 
| collation_connection | utf8mb4_unicode_ci | 
| collation_database | utf8mb4_unicode_ci | 
| collation_server | utf8mb4_unicode_ci | 
+————————————-+——————————-+

2. 修改数据表的编码为utf8mb4

执行命令:

ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4;

3. 在服务器和数据库连接的地方怎么办?

jdbc.url=jdbc:mysql://localhost:3306/aaa?useUnicode=true&characterEncoding=utf-8

这里这个utf-8要改成utf8mb4吗?

貌似不能改啊,数据库驱动就这些编码,没法改啊,一改就出错,不过没事,这是可以兼容的,对于jdbc的驱动来说.

既然无法修改,那就测试存储吧。

那么接下来会出现两种情况:

  1. 你可以存储表情了。
  2. 由于未知原因,你还是不能存储表情。

对于第二种情况的同学,我要告诉你的是,当你去操作这些需要加入表情的字段之前,请插入这条sql语句。

 SET NAMES utf8mb4

即可。

也就是说每次插入啊修改啊之前都set一次就没有问题了。



以上方法,是想要实现存储表情的情况下的方法,当然,有更省事的方法,就是不存储表情,我们在存的时候过滤掉表情即可,就不用担心以后各种取各种兼容各种显示了。


<!-- https://mvnrepository.com/artifact/com.vdurmont/emoji-java -->
<dependency>
    <groupId>com.vdurmont</groupId>
    <artifactId>emoji-java</artifactId>
    <version>4.0.0</version>!

这个包里,有这个方法,此方法可以自动移除输入的表情

String string = EmojiParser.removeAllEmojis(param);

本文来源:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值