mysql存储emoji表情报错的处理方法:更改编码为utf8mb4

uft-8编码可能2个字节、3个字节、4个字节,而MySql的uft-8只支持3字节的数据,而移动端的表情数据是4字节的字符。如果直接采用utf-8编码的数据库中插入表情数据,Java程序将报错:

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)

解决方法之一是对4字节的字符进行编码存储,然后取出来的时候,再进行解码。这样做的话就会使得任何使用该字符的地方都要进行解码和编码。

utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。

采用utf8mb4的好处是:存储与获取数据的时候,不用考虑编码和解码的问题

解决办法

更改数据库的编码为uft8mb4

1.MySql的版本

utf8mb4的最低版本支持版本为5.5.3+

2.MySql驱动

5.1.34可用,最低不能低于5.1.13

3.修改MySql配置文件

修改mysql的配置文件my.cnf,linux环境下一般在/etc/mysql/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'

4.重启数据库,检查变量

登录mysql后输入:SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

确保一下几个变量:

系统变量

描述

character_set_client

客户端来源数据使用的字符集

character_set_connection

连接层字符集

character_set_database

当前选中数据库的默认字符集

character_set_results

查询结果字符集

character_set_server

默认的内部操作字符集

这几个变量必须是utf8mb4.

同时,数据库和建好的表也转化为utf8mb4.

5.数据库连接的配置

数据库连接参数中:

characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。

而autoReconnect=true是必须加上的。

经过上面的步骤,就可以实现在mysql数据库中存储emoji表情了。

emoji表情mysql报错_MySql存储emoji表情报错的处理方法相关推荐

  1. nodejs项目mysql使用sequelize支持存储emoji

    nodejs项目mysql使用sequelize支持存储emoji 本篇主要记录nodejs项目阿里云mysql如何支持存储emoji表情. 因由 最近项目遇到用户在文本输入emoji进行存储的时候导 ...

  2. mysql 图标图标_MySQL 支持 emoji 图标存储

    在MySLQ中 UPDATA 和 INSERT 数据的时候,如果数据上面带有emoji图标,例如:?.?.? 很容易更新或者插入不成功,导致报错. 都快崩溃了,但是还好终于解决了这种鬼问题.资料显示原 ...

  3. mysql 显示表情符号_mysql 支持emoji 表情字符的解决方法。

    1.utf8 字符集最多3个字符,而emoji表情字符是unicode大字符集,需要4个字节表示,所以utf8无法表示. mysql要存储emoji字符,需要设成utf8mb4字符集,意思就是utf8 ...

  4. mysql 参照完整性规则_MySQL存储引擎你们知道多少?

    MySQL存储引擎技术详解点击观看! MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试 ...

  5. mysql模板引擎_MYSQL存储引擎解释

    存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念, ​ MySQL支持多种存储引擎,每种引擎有着一些自己独特的功能,用户在使用的时候,可以根 ...

  6. MySQL占用系统进程_MySQL的Sleep进程占用大量连接解决方法

    第一部分为产生大量sleep进程的原理及对应解决方法 第二部分为设置wait_timeout值,有效减少sleep进程 ======================================== ...

  7. mysql数据库包含_MySQL数据库判断字符串包含的三种方法

    方法一:SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用 mysql 字符串函数 find_in_set ...

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

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

  9. mysql 字符图标 报错_MySQL支持emoji图标存储

    在MySLQ中 UPDATA 和 INSERT 数据的时候,如果数据上面带有emoji图标,例如:

最新文章

  1. Linux下新增硬盘处理过程
  2. 为什么二级菜单会被挡住_武夷红茶为什么是二级茶?我们平时喝的红茶会不会被加了糖?...
  3. vi查找替换命令详解
  4. GitHub上最受欢迎的Android开源项目TOP20
  5. linux 命令输出保存为文件的三种方式
  6. jquery地址栏链接与a标签链接匹配添加样式!
  7. linux推出超级用户_linux添加root权限用户
  8. 如何文件服务器安装打印机,如何安装打印机方法图解
  9. (转)淘淘商城系列——使用maven tomcat插件启动web工程
  10. Linux-shell编程_xargs命令详解
  11. 浅谈逻辑漏洞:越权漏洞、密码找回漏洞、支付逻辑漏洞、指定账户恶意攻击、登录体系安全、业务一致性安全、业务数据篡改、验证码突破、数据重放安全
  12. C语言中if语句例题详解
  13. AltiumDesigner多通道复用设计教程(亲测可行版本)
  14. 采样点数与采样频率的区别
  15. 信号发生器-电路与电子技术课程设计
  16. MSP430F5529LP 2022电赛学习准备及相关例程
  17. 新闻组上看到一篇关于linux内核编译的文章,留待日后参考。
  18. Android中的多点触控(装载)
  19. Squirrel3 RC1 版本发布
  20. 如何证明是sci论文?

热门文章

  1. mysql字段替换_mysql 替换字段部分内容及mysql 替换函数replace()
  2. 从头开始绘制一个圆锥体
  3. uC/OS_II操作系统移植,亲测可用
  4. 译文 :图文教程,8步教你变身数据科学家
  5. 红米4a android p,一图彻底看懂红米4/红米4A
  6. 上半年要完成的博客51
  7. 解密Springboot内嵌Tomcat
  8. AE插件 自定义动画曲线AEscripts flow for Mac
  9. LINUX:Ubuntu重装虚拟机后无法拖拽文件的解决方法
  10. 魅族便签,能否成为国内便签应用的No.1?