国内产品网站,服务器租用,网站公告栏怎么做,中拓网络科技有限公司1.之前在学习过程中不知道utf8和utf8mb4的区别#xff0c;也没过多去了解#xff0c;直到最近设置的数据库编码全是utf8后发现问题所在了#xff0c;居然不能储存表情包#xff01;#xff01;#xff01;整个人直接傻了#xff0c;后面知道了utf8是3字节不能储存表情也没过多去了解直到最近设置的数据库编码全是utf8后发现问题所在了居然不能储存表情包整个人直接傻了后面知道了utf8是3字节不能储存表情utf8mb4才可以废话不多说马上整改接下来的一幕就令人头疼了。
2.我的mysql版本是5.7.40首先按照一些文章的教程修改数据库的编码为utf8mb4备注使用的是SQLyog工具 然后继续修改表的字符集格式为utf8mb4备注如果没有使用工具的建议去查一下修改数据库和表字符的字符集命令 然后我的pom.xml的MySQL依赖包如下
dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope
/dependency
然后yml文件数据库连接如下
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mcy_wechat_data?useSSLfalseseverTimezoneGMT%2b8username: namepassword: password
好了我以为这样就好了结果还是报错了如下 Caused by: java.sql.SQLException: Incorrect string value: \xF0\x9F\x98\x97\xF0\x9F... for column CONTENT at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
心态再次崩一直找了很多文章在修复后来自己发现数据库和表虽然改了字符集那么字段列属性呢果不其然一查发现字段的字符集还是utf8查看字段字符集命令如下
SHOW FULL COLUMNS FROM table_name; 这一波我真的无语了改了表的字符集字段居然没有跟着改这里用命令更改,如下
ALTER TABLE 表名 MODIFY 字段名 类型(如varchar(255)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
改后再查如下我这里其他的是utf8content是utf8mb4 果不其然就没报错了愉快的储存表情包了如下我的content把表情包已字符串形式给数据库了