微信 Emoji表情 保存Mysql数据库报错

2018-07-23  本文已影响0人  LAMYMAY

问题出在编码格式上,Emoji表情是编码格式uft-8mb4,MySQL默认的utf-8mb3,装不下就报错了,所以用MySQL的朋友们请不要使用"utf8",请使用"utf8mb4" 

处理方案:两种

方案1:修改数据库表

建议只修改表属性即可,不用重启数据库。下面是修改表属性字符集语句。

ALTER TABLE t_hhr_info MODIFY COLUMN wx_nickname VARCHAR(50) CHARACTER SET utf8mb4 NULL;

方案2:入库数据重新编码,依然是utf-8mb3格式的入库。出库数据在重新编码。

// 入库之前,使用 Base64 编码

String nickname = request.getParameter("nickname");

nickname = Base64.encodeBase64String(nickname.getBytes("utf-8"));

// 出库后,使用 Base64 解码

nickname = new String(Base64.decodeBase64(nickname.getBytes()),"utf-8");

//注意:Base64 连图片都能编码,何况区区一特殊符号

-----------------------------------------------------------------

今天做的了个获取微信粉丝的功能,发现将昵称插入数据库报错.长度肯定是够的

 string value: '\xF0\x9F\x98\x84\xF0\x9F

找了点资料发现UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

网上解决方案都是

修改mysql配置

1.在mysql的安装目录下找到my.ini,作如下修改:

[mysqld]

character-set-server=utf8mb4

[mysql]

default-character-set=utf8mb4

2 重启

net stop mysql

net start mysql

3 修改表

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

上一篇 下一篇

猜你喜欢

热点阅读