在开发移动应用的时候,用户在输入了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)
网上有解决办法。就是把数据库对应字段编码改为utf8mb4,这个编码可以看做是utf8升级版,完全向下兼容utf8,所以基本不用担心有什么乱码问题。
但是在openfire也做相同处理以支持发emoji表情的时候,发现只改字段编码还是不行。各种和之前的表进行对比,发现没什么不同;思前想后,觉得问题不是出在数据库上,应该是连接驱动有问题!果然,openfire用的驱动包是mysql.jar,没看是什么版本;我把之前好使的mysql驱动包拿来,果然可以了!
总结:
让mysql支持保存emoji表情,需进行如下两步。
1、数据库对应字段编码改为utf8mb4;
2、mysql连接驱动至少在5.1.16以上,我用的是mysql-connector-java-5.1.16-bin.jar
3、你的连库串上不要指定编码格式,如 jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8 需要把?useUnicode=true&characterEncoding=utf-8 去掉
==========================================
纠正一个问题!如果你的mysql版本在5.6以上的话,用mysql-connector-java-5.1.16-bin.jar在后台管理查看用户的时候是会报错的!错误信息如下:
2014.05.27 11:08:54 org.jivesoftware.openfire.user.DefaultUserProvider - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=1000' at line 1 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=1000' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619) at com.mysql.jdbc.StatementImpl.executeSimpleNonQuery(StatementImpl.java:1595) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2268) at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100) at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57) at com.mysql.jdbc.Statement$$EnhancerByProxool$$a23ade6c.executeQuery(<generated>) at org.jivesoftware.openfire.user.DefaultUserProvider.getUsernames(DefaultUserProvider.java:277) at org.jivesoftware.openfire.user.DefaultUserProvider.getUsers(DefaultUserProvider.java:300) at org.jivesoftware.openfire.user.UserManager.getUsers(UserManager.java:282) at org.jivesoftware.openfire.admin.user_002dsummary_jsp._jspService(user_002dsummary_jsp.java:232)
这个跟mysql有关,只能是升级mysql驱动版本,据说是要换到mysql-connector-java-5.1.22-bin.jar以上。楼主暂时还未测试。如果有问题,后续会继续说明!
相关推荐
Java开发,DB为Mysql,版本不详,编码用的是UTF-8,存入Emoji表情时报错如下: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x93' for column 'strValueContent' at row 1 解决方案:
Mysql支持emoji 表情符号 升级编码为UTF8MB4
php 处理APP emoji表情包 IOS表情包 Mysql保存手机表情
oracle不支持emoji表情的直接保存.可通过java解析为emoji字符进行存储.使用时再进行转化使之在移动端以emoji表情正常显示
移动前端手机输入法自带emoji表情字符处理. 处理emoji表情js 转码解码封装类
mysql数据库支持emoji实例,里面包含了一个5.7.6版本的免安装数据库,一个开发步骤文档。亲测可行。
java处理emoji表情工具类,可完美处理emoji表情。
使用js处理ios或android输入的emoji表情符号
1、开源案例源码,刚好找到,里面自己优化了一下脚本 2、适用于微信登录含有Emoji表情进行处理显示
抖音官方emoji表情,emoji格式为webp。如果需要其他格式可以使用“格式工厂”转换一下。http://www.pcgeshi.com/
判断字符串是否包含emoji表情
mysql存emoji表情报错处理 1. 在navicat中 如果在新建表之前就改变数据库的编码,建表的时候好像可以自己转变过来吧 查看字符集编码: show variables like '%char%'; 更改数据库编码: ALTER DATABASE 数据库名 ...
109个微信自带的emoji表情
emoji表情在我们日常开发中经常会遇到,但是最近在mysql中插入emoji表情遇到了问题,通过查找相关的资料终于解决了,所以将这次解决的过程分享出来,这篇文章主要就给大家介绍了MySQL插入emoji表情失败问题的解决...
微信最新Emoji表情149个png打包.zip
让 Windows 7 显示彩色 Emoji 表情符号
iOS系统风格的Emoji表情图片,图片大小72x72,png后缀,共3184个,Emoji的版本为v13.0。压缩包内提供PHP的使用示例,文档生成于2020年3月2日。
本工具类包含了Emoji表情的转码和解码 包括了通过url获取文件大小的功能
微信小程序添加emoji表情组件,雪碧图版本