mysql insert内容包含表情或者unicode码时候,插入Mysql时失败了,报如下异常:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
插入表情,或者类似下面sql文字情况,会发生这种问题
insert into aaa(id,name) values ('949','????');
sql中的“????”与通俗的"旗",字不同编码存储方式不同,复制到idea中就变样了,自动被解析成 "\uD84C\uDD03" 或者一块隐身文字。
解决问题,
1.设置表字段的编码为utf8mb4
2.如果长久性的解决(我没验证过),可以想网上说的,修改mysql配置文件,数据库等所有编码为utf8m64
如修改my.cnf
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
修改后重启Mysql
以root身份登录Mysql,修改环境变量,将character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server 都修改成utf8mb4
3.我的解决方式(比较临时)
同一个connection下,设置一次set names utf8m64;
SET NAMES utf8mb4;
insert into aaa(id,name) values ('949','????')
对应到java代码中也是一样
至此,OK了!