`
fly_宇光十色
  • 浏览: 64698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于MYSQL保存emoji表情及openfire处理办法

阅读更多

在开发移动应用的时候,用户在输入了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表情

    ### MySQL保存emoji表情 在Java开发环境中,当数据库使用MySQL且编码设置为UTF-8时,尝试存储包含emoji表情的数据可能会遇到如下错误: ``` java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x93' ...

    Mysql支持emoji 表情符号 升级编码为UTF8MB4

    Mysql支持emoji表情符号升级编码为UTF8MB4 在使用Mysql数据库时,如果需要支持emoji表情符号,需要对数据库的编码进行升级,以便正确地存储和显示emoji表情符号。下面是升级Mysql编码为UTF8MB4的步骤和注意事项: ...

    java解析emoji表情存入oracle,并正常使用

    在IT行业中,数据库管理和编程语言的交互是常见的工作场景,特别是在处理特殊数据类型时,如emoji表情。Oracle数据库系统在设计之初并未考虑对Unicode扩展区域的全面支持,因此默认情况下无法直接存储和检索emoji...

    php 处理APP emoji表情包 IOS表情包 Mysql保存手机表情

    本文将深入探讨如何在PHP环境下有效地处理和存储iOS的emoji表情,并在MySQL数据库中保存它们。 首先,我们需要了解emoji的本质。emoji是Unicode编码的一部分,每个表情对应一个特定的Unicode码点。在PHP中,处理...

    安卓端H5页面的emoji表情显示处理

    本文将详细讲解如何处理Android平台上的H5页面中的emoji表情,以及介绍一个用于js转码解码的封装类。 首先,了解emoji表情的基本概念。Emoji是一种由Unicode编码标准定义的表情符号,它们可以被用作文本的一部分,...

    emoji表情web处理

    iOS和Android设备用户在输入时会使用各自平台特定的emoji表情符号,这些符号在不同的操作系统和浏览器上可能显示不一致,因此在Web端处理emoji就显得尤为重要。本教程将详细介绍如何使用JavaScript来处理iOS和...

    微信emoji表情包.rar

    在IT行业中,尤其是在社交软件的使用中,表情符号(emoji)扮演着重要的角色,它们能够丰富文字交流,增强表达力,使沟通更加生动有趣。微信作为中国最受欢迎的即时通讯应用之一,内置了大量的emoji表情供用户选择。...

    Unity开发对Emoji表情包图文混排进行处理显示(支持大多数表情)

    在Unity游戏开发中,涉及到与用户交互的界面时,经常需要处理文本输入,其中包括了越来越多的用户喜欢使用的Emoji表情。本文将深入探讨如何在Unity中处理Emoji表情包,实现图文混排的显示,并确保对大多数表情的支持...

    emoji表情png图片

    在IT行业中,emoji表情已经成为日常交流和在线沟通的重要组成部分,特别是在移动设备和Web应用上。本文将详细讨论“emoji表情png图片”相关的知识点,包括它们的格式、用途、跨平台兼容性以及如何在不同系统中使用。...

    java处理emoji表情工具类

    java处理emoji表情工具类,可完美处理emoji表情。

    2020年抖音官方emoji表情

    随着短视频分享平台抖音的全球风靡,其用户间的互动性日益增强,而承载情感和态度的表情符号,即emoji,在日常交流中扮演着至关重要的角色。2020年,抖音官方推出的emoji表情包,以其独特性和创意性,进一步丰富了...

    通用emoji表情包与JSON

    这个主题“通用emoji表情包与JSON”涉及到如何将emoji集成到应用程序中,特别是利用JSON数据格式来存储和处理这些表情。下面将详细讨论相关知识点。 首先,我们来看**JSON(JavaScript Object Notation)**。JSON是...

    Emoji表情全部图片(PNG)资源,共3175张,尺寸72x72

    在IT行业中,尤其是在移动应用开发、网页设计以及社交媒体互动中,Emoji表情的使用已经变得非常普遍。它们是一种直观且富有表现力的方式,帮助用户在文本中传达情感和情绪。本资源包提供了3175张PNG格式的Emoji表情...

    非常全的emoji基本表情包

    "非常全的emoji基本表情包"提供了一个全面的资源库,包含了735个基本的emoji表情,这对于开发者来说是极具价值的工具。 首先,我们来深入了解一下emoji。Emoji是由日本电信公司NTT DoCoMo在1990年代初发明的,最初...

    微信Emoji表情带文件名149个打包.zip

    微信Emoji表情是微信聊天中广泛使用的视觉符号,用于表达各种情绪和反应。这些表情不仅仅限于常见的笑脸、爱心和动物图像,还包括许多富有特色的图标,如庆祝、惊讶、沮丧等情感,以及各种情境下的特殊符号。这个...

    微信最新Emoji表情149个png打包.zip

    微信最新Emoji表情149个png打包.zip

    mysql数据库支持emoji表情实例

    总结来说,MySQL 5.7.6及更高版本的数据库通过`utf8mb4`字符集支持了emoji,使得开发者可以在数据库中存储和处理丰富的文本信息,增强了用户界面的互动性。这个实例提供了从数据库设置到实际操作的完整流程,对于...

    微信小程序添加emoji表情组件,雪碧图版本

    在微信小程序开发中,添加Emoji表情组件是一种常见的需求,特别是在社交类应用中,用户往往需要通过表情来丰富自己的表达。本文将详细介绍如何在微信小程序中实现一个基于雪碧图(Sprite Sheet)版本的Emoji表情组件...

    MySQL无法存储emoji表情解决方案分析

    mysql存emoji表情报错处理 1. 在navicat中 如果在新建表之前就改变数据库的编码,建表的时候好像可以自己转变过来吧 查看字符集编码: show variables like '%char%'; 更改数据库编码: ALTER DATABASE 数据库名 ...

Global site tag (gtag.js) - Google Analytics