在实际开发过程中,涉及到向mysql数据表中insert tweet,很多情况下会报错:

1 org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update2

3 at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)4

5 at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)6

7 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)8

9 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)10

11 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)12

13 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)14

15 at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)16

17 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)18

19 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)20

21 at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)22

23 at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)24

25 at com.××××.××××.dao.TweetDaoImpl.saveTweet(TweetDaoImpl.java:63)26

27 at com.××××.××××.dao.CollectorFacadeImpl.saveTweetDate(CollectorFacadeImpl.java:36)28

29 at com.××××.××××.util.SavingTimerTask.run(SavingTimerTask.java:55)30

31 at java.util.TimerThread.mainLoop(Timer.java:512)32

33 at java.util.TimerThread.run(Timer.java:462)34

35 Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x93\xBA\xF0\x9F...' for column 'body' at row 1

36

37 at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1257)38

39 at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:943)40

41 at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)42

43 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)44

45 ... 12more46

原因是当前mysql的字符集为utf-8,最多3个字节,但遇到像emoji表情这样的特殊字符时,需要4个字节来表示。所以导致insert报错。

mysql> show character set;+----------+-----------------------------+---------------------+--------+

| Charset | Description | Default collation | Maxlen |

+----------+-----------------------------+---------------------+--------+

| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |

+----------+-----------------------------+---------------------+--------+

解决办法:

1.备份数据库

2.升级Mysql Server到v5.5.3+

3.修改database,table,column字符集

# For each database:ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE =utf8mb4_unicode_ci;

#For each table:ALTER TABLE table_name CONVERT TO CHARACTER SETutf8mb4 COLLATE utf8mb4_unicode_ci;

#For each column:ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SETutf8mb4 COLLATE utf8mb4_unicode_ci;

# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)

4.修改my.ini(linux下为my.cnf)

[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'

重新启动Mysql,检查字符集:

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';+--------------------------+--------------------+

| Variable_name | Value |

+--------------------------+--------------------+

| character_set_client | utf8mb4 |

| character_set_connection | utf8mb4 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | utf8mb4 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| collation_connection | utf8mb4_unicode_ci |

| collation_database | utf8mb4_unicode_ci |

| collation_server | utf8mb4_unicode_ci |

+--------------------------+--------------------+

10 rows in set (0.00 sec)

5.如果是用java连接的mysql,需要升级mysql-connector-java.jar至少到5.1.14

参考资料:

mysql处理emoji表情_Mysql处理emoji表情相关推荐

  1. mysql 过滤emoji表情_MySQL中emoji表情过滤

    问题描述 最近在对线上排错过程中发现很多入库时产生的错误日志,表现形态如下 Incorrectstringvalue:'\xF0\x9F\x91\x8D\xE6\x94...'forcolumn'co ...

  2. java mysql emoj报错_MySQL插入emoji表情报错 SQLException: Incorrect string value 的两种解决方案...

    原因:mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了. 第一种方案:修改数据库表字符集 而mysql为了解决这个问题,在5.5.3版本之后 ...

  3. mysql 苹果表情_mysql 插入emoji表情的时候报错问题。(苹果手机)

    一.问题现象 保存微信用户昵称到数据库,ios用户的昵称包含表情,插入数据库出错. 二.分析 使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错. 原因 ...

  4. mysql emoji表情_Mysql支持emoji表情

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)Mysql 支持 emoji 表情. 更多讨论或者错误提交,也请移步. 1. 前言 最近为博客添加了 ...

  5. mysql 字符集 表情_MySQL字符集(表情包)

    目录 1. 问题 - MySQL插入表情包符号 2.解决方法 2.1针对字段修改编码格式(推荐使用) 2. 2.整个数据库修改编码格式 3. MySQL字符集 3.1 数据库字符集 3.1.1查看当前 ...

  6. mysql 添加ios表情符号_mysql - 如何用PHP匹配并替换iOS标准的emoji表情符号

    遇到一个问题,要储存iOS键盘输出的emoji表情到MySQL,我知道用blob+utf8是可以存的.但是现在我的这张表已经太大了,不可能去改类型.所以就想把emoji表情匹配出来,替换掉,再存. 但 ...

  7. emoji 原生表情解析成对应表情包png

    最近刚完成一个给客服用的客服软件,用的是c#,这里记录的是我的聊天窗口(控件webBrowser)里,采用html标签解析聊天内容,如何实现将emoji原生表情解析成对应表情包中的png. 首先win ...

  8. java 过滤微信昵称_java过滤微信昵称emoji表情与非emoji的问题解决方法

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 过滤emoji表情与非emoji表情 * @author h ...

  9. 【博客表情包】emoji和符号表情包

    [博客表情包]emoji和符号表情包 带图网站 博客使用 常见的心心 符号表情 感谢大家的博客,让我发现了很多有趣的技术,欢迎各位大佬在评论区补充~ 看到有的大佬博客标题带有

最新文章

  1. RamDisk - 充分利用Vista的大内存
  2. 最小生成树-prim算法模板
  3. [原创]微软拼音输入法2007(含64位版)
  4. HDU - 1253 胜利大逃亡(搜索)
  5. html2canvas改成同步,html2canvas转为图片异步转同步问题(记录)
  6. python--字符/文本编码解码笔记
  7. 机器视觉系统需要考虑的十个问题
  8. SHLVL 和 BASH_SUBSHELL 两个变量的区别
  9. 程序发布出现: 服务器无法处理请求---无法生成临时类(result = 1)。 错误CS2001:未能找到源文件“C:\ Windows \ TEMP \ lph54vwf.0.cs”...
  10. 30 分钟学 Erlang
  11. Git小结---So far.......
  12. UBUNTU安装EMQ
  13. 算法:Search in Rotated Sorted Array(搜索部分顺序被翻转的数组)
  14. 2019计算机保研经验记录:南开软院、武大、信工所、南大软院、哈工深
  15. CorelDRAW2022下载附带序列号安装教程
  16. 编程中的概念理解-回调和eTS开发语言
  17. 程序员必备的七个电脑软件
  18. 在移动硬盘里移动视频文件到移动硬盘 另外一个文件夹 显示正在计算_稳定可靠的数据之仓 柯达X200 SSD固态移动硬盘体验评测...
  19. js 全屏与退出全屏
  20. OpenJudge1758 二叉树

热门文章

  1. DS18B20的使用介绍
  2. liunx在线安装mysql/修改mysql密码/设置简单mysql密码
  3. ElasticSerach 出现 high disk watermark [90%] exceeded on
  4. Java练习之坦克大战!!!复制可以直接用!!!文章最后有飞机大战代码!!!
  5. python柱形图绘制_Python数据分析:柱形图的绘制方法
  6. python利用datetime库实现通过身份证号码判断年龄、男女,并输出生日
  7. Activity基础 - 任务栈
  8. Eclipes更改主题及字体
  9. Mac 上简体中文输入方式的键盘快捷键
  10. java-IO流(1)-IO流和File类的介绍