java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94‘ for colum n ‘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)

当报以上错误的时候,可能是java代码中的字段与数据库中的字段类型或者编码不匹配,这种情况只要统一格式或者编码就就可以了。

这里主要介绍emoji的图像插入数据库的错误以及解决方法

使用mysql数据库的时候,如果字符集是UTF-8并且在java服务器上,当存储emoji表情的时候,会抛出以上异常(比如微信开发获取用户昵称,有的用户的昵称用的是emoji的图像)

这是由于字符集不支持的异常,因为utf-8编码有可能是两个,三个,四个字节,其中Emoji表情是四个字节,而mysql的utf-8编码最多三个字节,所以导致数据插不进去。

解决方式:

一.从数据库层面进行解决(mysql支持utf8mb4的版本是5.5.3+,必须升级到较新版本)

注意:

(1.修改database,table,column字符集

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

(2.修改mysql配置文件my.cnf(window为my.ini)

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

character-set-client-handshake = FALSE

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect=‘SET NAMES utf8mb4‘

(3.用的是java服务器,升级或者确保mysql connection版本高于5.1.13否则仍然不能试用utf8mb4

(4.服务器端的db配置文件

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE

jdbc.username=root

jdbc.password=password

如果升级了mysql-connector,其中的characterEncoding=utf8可以自动被识别为utf8mb4(兼容原来的utf8),而

autoReconnection(当数据库连接异常中断时,是否自动重新连接?默认为false)强烈建议配上,忽略这个属性,可能导致缓存缘故 ,

没有读取到DB最新的配置,导致一直无法试用utf8mb4字符集;

详细可见 :

http://segmentfault.com/a/1190000000616820

二.从应用层的方面进行解决

在获得数据之后往数据库存之前先进行编码:

URLEncoder.encode(nickName, "utf-8");

当从数据库中取出准备显示的时候进行解码,

URLDecoder.decode(nickname, "utf-8");

从应用层进行解决的时候建议不要在对象getter,setter方法中直接编码,因为放入对象的时候setter方法将nickname进行编码,当插入数据库的时候相当于从对象中调用getter方法将你参考取出这就将之前setter编码过的nickname又重新解码了,等于未对Nickname进行任何操作。依然会出现以上问题。

==============================

原文:https://www.cnblogs.com/sxdcgaq8080/p/9789267.html

java 保存微信表情_【java】【mysql】存储微信表情emoji表情相关推荐

  1. mysql存储移动端emoji表情 报错Incorrect string value: '\xF0\x9F\x98\x82'

    原因:mysql utf8存储2-3个字节 移动端的emoji表情为4个字节 方法: 1.修改my.cnf 文件 加入 [client] default-character-set = utf8mb4 ...

  2. 微信小程序开发——MySQl存储微信昵称的特殊表情

    项目场景: 最近再写一个微信小程序涉及到获取用户的昵称等信息,起初的时候一切进展顺利,但测试的时候发现一个问题,我们的一位同学始终不能正常授权信息,查询数据库也没有相关的信息.刚开始认为是手机问题或者 ...

  3. emoji隐藏表情_除了TouchBar可以快捷输入Emoji表情 这个快捷键也能做到

    如果身为一个同时拥有 iPhone 和 Mac 电脑的使用者,在用Mac与朋友聊天时如果想用一些可爱的表情符号,除了配备 TouchBar 触控列的 MacBook Pro ,能直接在文字输入状态下直 ...

  4. java后台处理APP表情-使用轻量工具emoji-java处理emoji表情字符

    目录 pom依赖 java工具类 测试 Java Url编码转换 在APP开发中,大多需要涉及表情符号丰富APP,但是因为我们的数据库一般是utf8编码,是3个字节,而表情符号基本都是四个字节的uni ...

  5. Emoji输入法表情过滤,方式mysql存储不下

    package charset; import org.apache.commons.lang.StringUtils; /** * 输入法表情过滤,方式mysql存储不下,目前mysql只能支持1- ...

  6. php 表情 代码_PHP 开发中涉及到emoji表情的几种处理方法

    最近几个月做微信开发比较多,存储微信昵称必不可少 可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ...

  7. 如何用计算机打出表情包,电脑的输入法怎么打出emoji表情?好玩又有趣的emoji输入...

    线上交流经常会用到有趣的emoji表情,手机上的输入法会有很多好玩的emoji表情,那在电脑上如何输入emoji表情呢?下面就借用电脑上的输入法来了解一下. 金山打字通采用过关斩将形式,让初学者可循序 ...

  8. mysql保存特殊表情_让 MySQL 支持 emoji 表情等特殊字符存储

    在导入 twitter 内容的时候,发现有部分内容会出错.开始以为是编码问题,但文本全部为 utf8 也会出现这个问题,后来定位到 emoji 字符.其原因是 utf8 是不定长的,根据左侧位来决定占 ...

  9. java斗图表情_程序员之间的斗图表情包, java真的输惨了!

    表情包成了人与人聊天中不可少的分量,陌生人聊天表情包丢出去妥妥的拉近关系变熟络啊(¬_¬) 而且可以用表情包化解尴尬.缓解气氛,可以没话找话.忙的时候也可以当做结束语,显得比较有礼貌! 对于沉默寡言. ...

  10. mysql 使用java代码进行操作系统_【MySQL 05】使用Java对MySQL进行操作(创建数据库)...

    JDBC连接数据库: 1.加载JDBC驱动程序 2.提供JDBC连接的URL 3.创建数据库的连接 4.创建一个Statement 5.执行SQL语句 6.处理结果 7.关闭JDBC对象 1.加载JD ...

最新文章

  1. 推荐8个极受欢迎的网站和软件,让你总有一天你会用到!
  2. Beats Studio3录音师手机音源配置,听出好声音,听出震撼效果!勇士限量款评测!
  3. oracle调度不见了,Oracle作业job 没有自动调度起来
  4. [Java基础]LinkedList集合的特有功能
  5. 博客堂怎么连个搜索功能都没有
  6. 【Jetty】Jetty 的工作原理以及与 Tomcat 的比较
  7. 力扣 求根到叶子节点数字之和
  8. 匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法 C#命名规范
  9. java nio空轮循_Java nio 空轮询bug到底是什么
  10. 检索方法应该返回#39;null#39;还是无法产生返回值时引发异常? [关闭]
  11. iOS 实现搜索关键字高亮
  12. html跳转函数,javascript函数里如何实现页面跳转?
  13. oracle卸载报错,oracle卸载
  14. 谷歌浏览器的视频下载插件推荐
  15. 如何将 Ubuntu 配置为Ap模式
  16. 【微信小程序---如何引入阿里巴巴图标步骤】
  17. QCustomPlot系列 进行框选放大(二)
  18. 最新Android 黄油刀(Butterknife)的简单使用
  19. 基于VUE的音乐播放器
  20. iPhone 4 无shsh 完美降级 iOS 6

热门文章

  1. 【转载】数据库操作系统——Visual FoxPro 6.0安装步骤
  2. 15 分钟 教你搞一个专属于你的域名邮箱
  3. 百度收购YY:第三次直播大战开启
  4. 员工新参(北京)社保所需材料
  5. Qt下的综合练习—汽车信息管理系统(一)主界面设计
  6. 微软疑断自由软件开发者“活路”,禁止在微软商店发布商业开源
  7. 熟练计算机数字键盘,电脑键盘盲打及快速输入技巧【一】
  8. 泛微O A系统怎么获取服务器地址,泛微协同商务系统(Ecology)_系统底层包开发指南...
  9. 自然电位测井 基本原理、测量方法、曲线规律、曲线用途
  10. RTOS中的任务句柄到底是什么意思?