让Java后台MySQL数据库能够支持emoji表情的方法
前言
公司最近在开发中遇到一个问题,在弄帖子的发布与回复问题,然后再iOS端和Android端添加表情的时候都会出错
Causedby:java.sql.SQLException:Incorrectstringvalue:'\xF6\x9D\x98\x84'forcolumn'comment'atrow1
提示表情有问题,然后赶紧查资料。
首先数据库编码为UTF-8,字段content设置为text(CHARSET=utf8COLLATE=utf8_unicode_ci)用于存储帖子内容信息,现在上线新功能存储emoji表情,插入emoji表情就会报出上述错误,UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。utf8mb4兼容utf8,且比utf8能表示更多的字符,所以要设置数据库的编码为utf8mb4。
数据库编码从utf8设置为utf8mb4
1、修改my.cnf
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SETNAMESutf8mb4' character-set-client-handshake=false
2、对数据库相关的表进行字符集修改
将数据库转换为utf8mb4
ALTERDATABASEpostCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci; ALTERTABLE`post_article`CONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci; ALTERTABLE`post_article`MODIFYCOLUMN`content`textCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;
3、重启数据库
sudo/etc/init.d/mysqlrestart
4、检查数据库的字符集是否是utf8mb4
SHOWVARIABLESWHEREVariable_nameLIKE'character%'ORVariable_nameLIKE'collation%';
5、java设置
设置Java的数据库连接,将characterEncoding去掉,然后保证mysqlconnector版本高于5.1.13,就OK了
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。