总结项目中不支持emoji表情的问题的解决方法

原创 2016年05月31日 11:12:12

最近财神圈项目集成微信登录功能的过程中,当保存用户有昵称含有表情符号时后台服务抛出异常,原来是数据库默认字符集不支持emoji表情字符。找到问题的原因后,因为之前也没有遇到过这样的问题,也没思路,迅速百度大神找了一大堆资料来,原来仅只要将数据库及相关的表和表字段设置为utfmb84即支持emoji表情的。

问题的原因是数据库中使用的字符编码为UTF-8,这种编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而mysql的utf8编码最多3个字节,所以数据插不进去,而utfmb64是支持四个字节的。所以解决方案就是:将mysql编码从utf8转换成utf8mb4。

现将解决的思路和步骤分享一下,为了改过之前写文章过于草率,尽量将所找的资料和我的实战经验写得完整一下以示尊重读者。

1,检测你的数据库版本,数据库版本需>=5.5.3版本.

如何察看mysql版本如下图,我安装的是mysql下的一个开源分支mariadb,版本10.0对应的是mysql版本5.6以上,所以是支持的。


2,如果你的mysql服务正在启动中,请右击我的电脑-管理-服务,关闭mysql server这个服务。

3,设置数据库默认支持字符集utf8mb4,

找到mysql安装目录下的my.cnf或者mysql.ini,修改my.cnf或mysql.ini

[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'

4,重启mysql server

检查字符集

mysq>SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';


 5,存在的数据库的字符集是utf8的,如果要支持utf8mb64则需要将已经存在的数据库、表、表字段类型修改成支持utf8mb64.

修改数据库字符集:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改表的字符集:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改字段的字符集:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

6,这步可有可无,前提是如果使用到 spring boot的连接池,请在spring boot 的配置文件application.properties设置连接使用utf8mb64

spring.mysql.datasource.init-sql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

7,设置连接驱动的JDBC_URL

修改如jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
这里请注意如果数据库版本大于5.1.13驱动程序connector不能加characterEncoding=utf8,一定要去掉characterEncoding=utf8。

以上步骤测试过很多表的相关字段均都完美解决。

附上我的测试效果图



版权声明:本文为博主原创文章,未经博主允许不得转载。

Java Mysql Emoji 配置

关键:把 Mysql 的字符集从 utf8 改为 utf8mb4...

基于emoji 国际通用表情在web上的输入与显示的记录

定义:   emoji 即国际通用表情 场景: 1,ios,android,wp上emoji表情输入与显示 2,web也需作为支撑平台对emoji表情就行输入与显示(解析) ...

emoji处理方式大起底

emoji资料 今天研究了emoji,挺有意思,资料挺多,摘要一些信息给大家分享,也算是自己记录学习。 emoji介绍 Emoji (絵文字,词义来自日语えもじ,e-moji,moj...

解决emoji插入不到数据库的问题

解决emoji插入不到数据库的问题

c#往SQL Server写Emoji表情

Emoji表情其实也是字符,只不过是UTF8-mb4。SQL Server默认是支持的,至少亲测2005版及以后版是支持的。 但是如果你用C#,然后又是直接如下面这样写SQL语句,并不能得到所希望的...

java代码过滤emoji表情

java代码过滤emoji表情 可以新建一个过滤器的类,在类中书写如下代码: public static String filterEmoji(String source) {  ...

Emoji表情符号兼容方案

Emoji表情符号兼容方案 一 什么是Emoji          emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)   表情符号现已普遍应用于手机短信...

mariadb设置字符集为utf8mb4

编辑server.cnf[mariadb-10.0] character-set-client-handshake = FALSE character_set_server = utf8mb4 #ch...

如何处理emoji等4字节的Unicode字符 - utf8mb4 vs. utf8 Collations

1. Unicode是什么 Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处...

MySQL数据库无法通过 utf8mb4 连接的解决方式

环境:阿里云 centos 6.5 mysql 5.6 python 问题:通过uri里面设置 charset=utf8mb4 连接数据库时,发生问题 Character set ‘utf...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:总结项目中不支持emoji表情的问题的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)