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]
接下来演示一下正确的使用姿势,以及导致上面问题的错误case,避免大家重复采坑
I. Emoj表情支持之旅
接下来我们的目标是可以直接向mysql中读取或写入emoj表情
1. 表字符集
首先针对mysql表,需要指定字符集为utfbmb4
1 2 3 4 5 6 7 8 9 10
CREATE TABLE `Subscribe` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(140) NOT NULLDEFAULT'', `nick` varchar(30) NOT NULLDEFAULT'昵称', `status` tinyint(4) NOT NULLDEFAULT'0' COMMENT '0 订阅未激活, 1 订阅已激活 , 2 取消订阅', `created` int(13) NOT NULLDEFAULT'0' COMMENT '创建时间', `updated` int(13) NOT NULLDEFAULT'0' COMMENT '更新时间' PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8mb4;
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.