MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解决方法

 更新时间:2018年04月19日 09:05:30   作者:Andy Liu  
这篇文章主要给大家介绍了关于MySQL存储表情时报错:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'的相关解决方法,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍:

本项目是基于Spring MVC + MySQL + Druid DataSource。在往数据库插入表情Emoji字符时报错:

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'

普通字符最多占用3个字节,使用utf8足够。而emoji表情字符占用4个字节,需要使用utf8mb4字符集存储。解决需要在两个地方做修改:MySQL服务器端和连接的客户端。

MySQL服务器端

之前给大家介绍过使MySQL能够存储emoji表情字符的设置教程,想进一步了解的朋友可以先看一看。

在服务器端把需要存储表情emoji字符的字段改用utf8mb4字符集:

ALTER TABLE mytable MODIFY COLUMN myfiled varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

客户端

客户端需要把连接的字符集设定为utf8mb4。

设置如下:

set names utf8mb4;

使用的是阿里开源的druid datasource,它有一个属性connectionInitSqls,它用来设置物理连接初始化的时候执行的sql。所以我们可以使用connectionInitSqls来初始化连接。

Spring配置如下:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
 <!-- 基本属性 url、user、password -->
 <property name="url" value="jdbc:mysql://localhost:3888/majing?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" />
 <property name="username" value="dbusername"/>
 <property name="password" value="dbpasswod"/>
 <property name="connectionInitSqls" value="set names utf8mb4;" />
 <!-- 其他配置 -->
</bean>

其他的数据库连接池如dbcp2,HikariCP都有connectionInitSqls属性。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 解决MySql8.0 查看事务隔离级别报错的问题

    解决MySql8.0 查看事务隔离级别报错的问题

    这篇文章主要介绍了解决MySql8.0 查看事务隔离级别报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • MySQL中必须了解的13个关键字总结

    MySQL中必须了解的13个关键字总结

    这篇文章主要为大家详细介绍了MySQL中必须了解学会的13个关键字,文中的示例代码简洁易懂,对我们掌握MySQL有一定的帮助,需要的可以了解下
    2023-09-09
  • MyEclipse通过JDBC连接MySQL数据库基本介绍

    MyEclipse通过JDBC连接MySQL数据库基本介绍

    MyEclipse使用Java 通过JDBC连接MySQL数据库的基本测试前提是MyEclipse已经能正常开发Java工程
    2012-11-11
  • mysql启用skip-name-resolve模式时出现Warning的处理办法

    mysql启用skip-name-resolve模式时出现Warning的处理办法

    在优化MYSQL配置时,加入 skip-name-resolve ,在重新启动MYSQL时检查启动日志,发现有警告信息
    2012-07-07
  • mysql中EXISTS和IN的使用方法比较

    mysql中EXISTS和IN的使用方法比较

    这篇文章主要给大家介绍了关于mysql中EXISTS和IN使用方法比较的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • MySQL 服务和数据库管理

    MySQL 服务和数据库管理

    今天MySQL总结一些方法和一些基础的内容,下面文章将围绕MySQL 服务与数据库管理得相关资料展开内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • MySQL版oracle下scott用户建表语句实例

    MySQL版oracle下scott用户建表语句实例

    这篇文章主要给大家介绍了关于MySQL版oracle下scott用户建表语句的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • MySQL Event Scheduler(事件调度器)

    MySQL Event Scheduler(事件调度器)

    事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。
    2010-06-06
  • 解决“无法启动mysql服务 错误1069”的方法

    解决“无法启动mysql服务 错误1069”的方法

    本文给大家分享的是小编解决自己网站无法连接数据库的时候遇到的“无法启动mysql服务 错误1069”的方案,有相同需求的小伙伴可以参考下
    2017-08-08
  • 使用RPM包安装MySQL 5.7.18的教程

    使用RPM包安装MySQL 5.7.18的教程

    这篇文章主要介绍了使用RPM包安装MySQL 5.7.18的教程,需要的朋友可以参考下
    2017-04-04

最新评论