mysql 5.6 插入表情符

原因: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]", "");

}

 

Guess you like

Origin blog.csdn.net/zhaofuqiangmycomm/article/details/117044864
5.6