问题出在编码格式上,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;