在开发移动应用的时候,用户在输入了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以上。楼主暂时还未测试。如果有问题,后续会继续说明!
相关推荐
### MySQL保存emoji表情 在Java开发环境中,当数据库使用MySQL且编码设置为UTF-8时,尝试存储包含emoji表情的数据可能会遇到如下错误: ``` java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x93' ...
Mysql支持emoji表情符号升级编码为UTF8MB4 在使用Mysql数据库时,如果需要支持emoji表情符号,需要对数据库的编码进行升级,以便正确地存储和显示emoji表情符号。下面是升级Mysql编码为UTF8MB4的步骤和注意事项: ...
在IT行业中,数据库管理和编程语言的交互是常见的工作场景,特别是在处理特殊数据类型时,如emoji表情。Oracle数据库系统在设计之初并未考虑对Unicode扩展区域的全面支持,因此默认情况下无法直接存储和检索emoji...
本文将深入探讨如何在PHP环境下有效地处理和存储iOS的emoji表情,并在MySQL数据库中保存它们。 首先,我们需要了解emoji的本质。emoji是Unicode编码的一部分,每个表情对应一个特定的Unicode码点。在PHP中,处理...
本文将详细讲解如何处理Android平台上的H5页面中的emoji表情,以及介绍一个用于js转码解码的封装类。 首先,了解emoji表情的基本概念。Emoji是一种由Unicode编码标准定义的表情符号,它们可以被用作文本的一部分,...
iOS和Android设备用户在输入时会使用各自平台特定的emoji表情符号,这些符号在不同的操作系统和浏览器上可能显示不一致,因此在Web端处理emoji就显得尤为重要。本教程将详细介绍如何使用JavaScript来处理iOS和...
在IT行业中,尤其是在社交软件的使用中,表情符号(emoji)扮演着重要的角色,它们能够丰富文字交流,增强表达力,使沟通更加生动有趣。微信作为中国最受欢迎的即时通讯应用之一,内置了大量的emoji表情供用户选择。...
在Unity游戏开发中,涉及到与用户交互的界面时,经常需要处理文本输入,其中包括了越来越多的用户喜欢使用的Emoji表情。本文将深入探讨如何在Unity中处理Emoji表情包,实现图文混排的显示,并确保对大多数表情的支持...
在IT行业中,emoji表情已经成为日常交流和在线沟通的重要组成部分,特别是在移动设备和Web应用上。本文将详细讨论“emoji表情png图片”相关的知识点,包括它们的格式、用途、跨平台兼容性以及如何在不同系统中使用。...
java处理emoji表情工具类,可完美处理emoji表情。
随着短视频分享平台抖音的全球风靡,其用户间的互动性日益增强,而承载情感和态度的表情符号,即emoji,在日常交流中扮演着至关重要的角色。2020年,抖音官方推出的emoji表情包,以其独特性和创意性,进一步丰富了...
这个主题“通用emoji表情包与JSON”涉及到如何将emoji集成到应用程序中,特别是利用JSON数据格式来存储和处理这些表情。下面将详细讨论相关知识点。 首先,我们来看**JSON(JavaScript Object Notation)**。JSON是...
在IT行业中,尤其是在移动应用开发、网页设计以及社交媒体互动中,Emoji表情的使用已经变得非常普遍。它们是一种直观且富有表现力的方式,帮助用户在文本中传达情感和情绪。本资源包提供了3175张PNG格式的Emoji表情...
"非常全的emoji基本表情包"提供了一个全面的资源库,包含了735个基本的emoji表情,这对于开发者来说是极具价值的工具。 首先,我们来深入了解一下emoji。Emoji是由日本电信公司NTT DoCoMo在1990年代初发明的,最初...
微信Emoji表情是微信聊天中广泛使用的视觉符号,用于表达各种情绪和反应。这些表情不仅仅限于常见的笑脸、爱心和动物图像,还包括许多富有特色的图标,如庆祝、惊讶、沮丧等情感,以及各种情境下的特殊符号。这个...
微信最新Emoji表情149个png打包.zip
总结来说,MySQL 5.7.6及更高版本的数据库通过`utf8mb4`字符集支持了emoji,使得开发者可以在数据库中存储和处理丰富的文本信息,增强了用户界面的互动性。这个实例提供了从数据库设置到实际操作的完整流程,对于...
在微信小程序开发中,添加Emoji表情组件是一种常见的需求,特别是在社交类应用中,用户往往需要通过表情来丰富自己的表达。本文将详细介绍如何在微信小程序中实现一个基于雪碧图(Sprite Sheet)版本的Emoji表情组件...
mysql存emoji表情报错处理 1. 在navicat中 如果在新建表之前就改变数据库的编码,建表的时候好像可以自己转变过来吧 查看字符集编码: show variables like '%char%'; 更改数据库编码: ALTER DATABASE 数据库名 ...