原因:mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情,导致报错.
Incorrect string value: '\xF0\x9F\x98\xAD",...' for column 'commentContent' at row 1
解决方案一 .彻底解决改变库表的编码格式
数据库目前采用的编码为UTF8, 转换为可支持4个字节的utf8mb4_unicode编码。一劳永逸,但因四个字节存储空间较大,从数据库优化角度不建议这么做
1.修改数据库表的编码格式
字符集为: utf8mb4 -- UTF-8 Unicode
排序规则为:utf8mb4_general_ci
2.同样修改表和表字段的字符集,(注意可能不是一张表,可能有接口日志表,系统日志表)
3.修改数据库连接:
把 连接中的 characterEncoding=utf-8 去掉
重启tomcat
4.修改完看是否生效,不生修改 mysql配置文件 vim /etc/my.cnf
[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
然后重启myql服务
有了,我笑,我发愁,哈哈
这时数据库存的也是可爱的小脸
解决方案二:替换存储
替换存是最好的解决方案,但比较麻烦,只能适用于某个字段,别的表,别的字段需要就需要改代码
https://www.cnblogs.com/zhangxuetao/p/12972377.html
解决方案三:js 或者java 直接去掉
我就不要表情的情况下考虑
js去: 控制只能输入:中英文 + 数字 +常用的标点符号
οnkeyup="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\.\,\?\<\>\。\,\-\——\=\;\@\!\!\+\$]/g,'')"
java去:
public static String removeNonBmpUnicodes(String s) {
return null == s ? null : s.replaceAll("[^\\u0000-\\uFFFF]", "");
}