微信 nickname mysql_微信nickname中包含emoji的问题

问题原因:

微信昵称是可以添加emoji表情的,当我们保存带有emoji的昵称时,mysql数据库会报错

原因是我们使用mysql数据库存储格式一般是utf8,而mysql的“utf8”实际上不是真正的 UTF-8。

“utf8”只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。

mysql的“utf8mb4”是真正的“UTF-8”。

而emoji恰恰就是四个字节,所以保存的时候会报错。

解决办法:

1.把mysql数据库格式utf8改成utf8mb4

将my.ini(win)文件配置修改,如下

[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.JDBC连接串的问题,有些项目在jdbc连接串里指定了编码,例如:

jdbc:mysql://localhost/mydb?characterEncoding=UTF-8

2.字符集修改之后要将相关表结构中的表的字符集以及表中字段的字符集也修改为utf8mb4

2.使用一个轻量级框架emoji-javagithub地址:https://github.com/vdurmont/emoji-java

这个思路是将emoji按照框架里保存的类似枚举类型的emoji进行对比,如果匹配到了,就将emoji转成:cry:

类似这种格式的字符串保存到数据库中,拿的时候再去匹配,如果包含这种格式的Aliases,就解析成emoji

但是这又有两个问题,1.生产环境中可能会有各种的emoji,如果emoji-java框架没有这种emoji,数据库还是会报错

2.小概率如果有字段带有:cry:这种格式,会将他转成emoji

总结:如果条件允许,直接改数据库格式,最好在一开始就把数据库设置成

utf8mb4这种格式的,

mysql中utf8不是真正的utf-8, utf8mb4才是真正的utf-8

有博客说这是mysql的一个bug但是一直没有修复,不知道这种说法正不正确,

方法二可以暂时解决问题,但是会有坑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值