上周在做微信摄影投票时,遇到这么一个情况,在微信中,如果将用户昵称修改为Emoji表情字符后,再通过hibernate向MySQL存储时,报如下错误:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1 at com..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)
原因是:MySQL中utf-8编码,一个字符占3个字节,但是微信Emoji表情字符,它的编码是utf8mb4编码的,一个字符占4个字节。就是因为这个原因,导致插入昵称时失败。
解决方案:
1、修改MySQL中对应表的昵称字段编码格式为utf8mb4;
2、放弃使用hibernate进行数据的存储或更新,改用纯jdbc的方式(hibernate的没研究过,不知道可不可以),代码片段如下:
String username = "root"; String password = "111111"; String className = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://127.0.0.1:3306/vote?autoReconnect=true&useUnicode=true&characterEncoding=utf-&zeroDateTimeBehavior=convertToNull"; Class.forName(className ); Connection conn = DriverManager.getConnection(url , username , password ); public static Long save(String sql, Object[] params){ Long ret = null; ResultSet rs = null; Connection conn = null; PreparedStatement cmd = null; try { conn = getDBConnection(); conn.setAutoCommit(true); //通过查询运行设置字符集的命令(这一句是重点) conn.prepareStatement("set names utf8mb4").executeQuery(); cmd = conn.prepareStatement(sql); if(params == null || params.length == 0){ return -1L; } for (int i = 0; i < params.length; i++) { cmd.setObject(i+1, params[i]); } cmd.executeUpdate(); // 获取最后一条插入数据的自增列值 String sql2 = "select @@IDENTITY"; cmd = conn.prepareStatement(sql2); rs = cmd.executeQuery(); if (rs.next()) { ret = Long.parseLong(rs.getObject(1)+""); } } catch (SQLException e) { e.printStackTrace(); logger.error(e.getMessage(), e); } finally { try { if(cmd != null){ cmd.close(); } if(rs != null){ rs.close(); } if(conn != null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return ret; }完成上述修改之后,emoji表情字符就可以正常的插入到MySQL中了。
相关推荐
微信最新Emoji表情149个png打包.zip
这个"微信emoji表情包.rar"文件包含了微信平台上的109个官方表情,涵盖了日常聊天中的各种情绪和情境。 首先,我们来详细了解一下emoji的基本概念。Emoji起源于日本,最初是由手机运营商Docomo设计的一套图标,后来...
在微信的日常使用中,表情符号是沟通交流的重要组成部分,特别是那些特殊的表情字符和emoji,它们为文字对话增添了丰富的色彩和情感表达。本资源包包含了微信467个特殊的表情字符及其对应的微信识别字符,以及111张...
微信Emoji表情是微信聊天中广泛使用的视觉符号,用于表达各种情绪和反应。这些表情不仅仅限于常见的笑脸、爱心和动物图像,还包括许多富有特色的图标,如庆祝、惊讶、沮丧等情感,以及各种情境下的特殊符号。这个...
原本想做个仿微信聊天室,需要微信的官方表情,但找了一天都没有找到满意的,所以自己截图再切图做了一个,打包就1个html和png文件夹,非常简洁;html文件打开就是示例效果,源码还包含了一个json数组,格式是:var ...
在微信开发过程中,有时我们需要在网页上展示用户发送的emoji表情,这为沟通增添了丰富的表现力。本教程将详细介绍如何在网页中正确显示这些表情,让用户体验更加生动有趣。 首先,我们要理解emoji表情的本质。它们...
本问题涉及的是一个典型的Java、iPhone和微信环境下的emoji表情存储问题。当iPhone 5s用户尝试在昵称中使用emoji表情时,这些表情无法成功保存到MySQL数据库中,导致报出"java.sql.SQLException: Incorrect string ...
在网页设计中,为了增强用户体验和情感表达,经常会使用各种表情图标,而微信emoji表情由于其丰富多样,深受用户喜爱。本教程将详细介绍如何通过简单的步骤,在网页上直接显示微信emoji表情,使得网页内容更加生动...
这个压缩包主要包含了一系列与微信平台兼容的emoji表情图像,这些图像通常用于增强用户在聊天、社交媒体和其他交互式应用中的表达能力。下面我们将深入探讨与这个主题相关的IT知识点。 1. **Unicode和Unicode表情**...
"微信最新自带表情emoji.rar"这个压缩包文件显然包含了微信的最新表情符号集,这些emoji是微信用户在聊天中表达情感、情绪和观点的重要工具。在进行通讯软件开发时,了解并熟悉这类表情系统的实现和应用对于提升用户...
在Android开发中,实现类似微信的Emoji表情功能是一项常见的需求,尤其在聊天、评论等交互性强的应用场景。这个"android 仿微信Emoji表情demo"是一个示例项目,它旨在帮助开发者理解和实现这样的功能。下面我们将...
在IT行业中,尤其是移动应用开发领域,表情符号(Emoji)已经成为用户交流不可或缺的一部分。iOS系统的Emoji因其独特的设计风格和广泛的应用而备受喜爱。本资源提供的是一个包含3184个不同Emoji的PNG图片集合,这些...
在微信小程序中使用Emoji表情,可以增强用户体验,使交互更加生动有趣。以下是对"微信小程序Emoji表情源代码"这个主题的详细说明: 1. **表情的表示方式**: 微信小程序中,Emoji表情通常有两种表示方式:Unicode...
微信表情包是微信用户在聊天过程中广泛使用的交流工具,它以图像的形式传递各种情感和反应,使得沟通更加生动有趣。"微信emoji表情包*141.rar" 是一个包含141个不同表情的压缩文件,专为微信平台设计。这些表情涵盖...
QQ微信默认的emoji表情在社交应用中广泛使用,它们为用户提供了丰富的表达方式。这个压缩包包含QQ和微信两种平台的emoji表情图片,以及相关的对照表和编程示例,主要涉及的技术点有图像处理、字符编码和编程语言的...
最全的高清微信官方表情
在IT行业中,数据库管理和编程语言的交互是常见的工作场景,特别是在处理特殊数据类型时,如emoji表情。Oracle数据库系统在设计之初并未考虑对Unicode扩展区域的全面支持,因此默认情况下无法直接存储和检索emoji...
在微信小程序开发中,添加Emoji表情组件是一种常见的需求,特别是在社交类应用中,用户往往需要通过表情来丰富自己的表达。本文将详细介绍如何在微信小程序中实现一个基于雪碧图(Sprite Sheet)版本的Emoji表情组件...
为了满足用户在不同情境下使用微信表情的需求,有一个资源包“微信emoji表情转成图片资源包.zip”应运而生,它将精选的微信emoji表情转换成图片格式,打包分享,以便用户在任何需要的场合,尤其是非微信环境中使用...
在Web开发中,微信emoji显示是一项常见的需求,特别是在社交或者聊天功能的网页应用中。本文将详细介绍如何在Web端实现微信emoji表情的显示,并结合给定的文件资源——`emoji.css`、`table.htm`、`emoji.js`和`emoji...