【mysql】存储emoji报错


MySql存储emoji表情报错的处理方法

在做微信登录时报错,

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)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)

这个是因为name字段编码格式为utf-8 在mysql中 utf-8字段只支持3个字节,而表情数据时四个字节, 直接插入的话, 就会报错。

解决办法

更改数据库的编码为uft8mb4

1.MySql的版本

utf8mb4的最低版本支持版本为5.5.3+

2.MySql驱动

5.1.34可用,最低不能低于5.1.13

3.修改MySql配置文件#

修改mysql的配置文件my.cnf,linux环境下一般在/etc/mysql/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'

4.重启数据库,检查变量

登录mysql后输入:

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

确保一下几个变量:

系统变量 描述
character_set_client– 客户端来源数据使用的字符集
character_set_connection– 连接层字符集
character_set_database– 当前选中数据库的默认字符集
character_set_results– 查询结果字符集
character_set_server– 默认的内部操作字符集
这几个变量必须是utf8mb4.

同时,数据库和建好的表也转化为utf8mb4.

5.数据库连接的配置#

数据库连接参数中:
characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。
而autoReconnect=true是必须加上的。

经过上面的步骤,就可以实现在mysql数据库中存储emoji表情了。


文章作者: zxc
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zxc !
 上一篇
【mysql】查询时类似Oracle Rownum的效果 【mysql】查询时类似Oracle Rownum的效果
查询时类似Oracle Rownum的效果SELECT @rowno:=@rowno+1 as rowno,r.* from table_name r ,(select @rowno:=0) t;快速创建表下面这条语句可以快速创建包含查询结
2021-02-03
下一篇 
【ElementUI】Added non-passive event listener to a scroll-blocking 'mousewheel' event. 【ElementUI】Added non-passive event listener to a scroll-blocking 'mousewheel' event.
Added non-passive event listener to a scroll-blocking ‘mousewheel’ event. Consider marking event handler as ‘passive’ to
2021-01-28
  目录