项目场景:
小程序里面评论 存储emoji报错
问题描述:
插入emoji时 抛异常
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x9D\xE6\xB1...' for column 'nick' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) ~[mysql-connector-java-5.1.30.jar:na] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232) ~[mysql-connector-java-5.1.30.jar:na] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164) ~[mysql-connector-java-5.1.30.jar:na] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615) ~[mysql-connector-java-5.1.30.jar:na] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776) ~[mysql-connector-java-5.1.30.jar:na] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2838) ~[mysql-connector-java-5.1.30.jar:na] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082) ~[mysql-connector-java-5.1.30.jar:na]
原因分析:
数据库 字段 无法存储该格式 我默认是utf-8
而MySQL 中的 utf8 并不是真正的 UTF-8 编码,Mysql的utf8一个字符只有三个字节
Mysql的utf8mb4才是真正的utf-8 支持最多四个字节。
为什么 MySQL 中的 utf8 并不是真正的 UTF-8 编码?
解决方案:
直接设置表的字符集为utf8mb4
我用的Navicat 直接设置了数据库 某表 某列的类型为utf8mb4