让MySql支持Emoji表情存储

标签: mysql emoji 2016-05-19 10:24 1922人阅读 评论(0) 收藏 举报 分类: 数据库(4)
版权声明:本文为博主原创文章,未经博主容许不得转载。java

手机端插入Emoji表情,保存到数据库时报错:mysql

Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column 'review' 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.executeUpdate(PreparedStatement.java:2458)sql

经检查缘由: UTF-8编码有多是两个、三个、四个字节。Emoji表情是4个字节,而MySQL的utf8编码最多3个字节,因此数据插不进去。数据库

解决方案:将Mysql的编码从utf8转换成utf8mb4。编码

  1. 修改my.ini [mysqld] character-set-server=utf8mb4

2. 在后台配置mysql链接参数中,不要加characterEncoding参数。 不加这个参数时,默认值就时autodetect。code

  1. 将已经建好的表也转换成utf8mb4 命令:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; (将TABLE_NAME替换成你的表名)
  2. 将须要使用emoji的字段设置类型为: 命令:ALTER TABLE TABLE_NAMEMODIFY COLUMN COLUMN_NAME text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
相关文章
相关标签/搜索