MySQL存储表情时报java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x
这篇文章将为大家详细讲解有关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字符集:
ALTERTABLEmytableMODIFYCOLUMNmyfiledvarchar(100)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;
客户端
客户端需要把连接的字符集设定为utf8mb4。
设置如下:
setnamesutf8mb4;
使用的是阿里开源的druid datasource,它有一个属性connectionInitSqls,它用来设置物理连接初始化的时候执行的sql。所以我们可以使用connectionInitSqls来初始化连接。
Spring配置如下:
<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"><!--基本属性url、user、password--><propertyname="url"value="jdbc:mysql://localhost:3888/majing?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"/><propertyname="username"value="dbusername"/><propertyname="password"value="dbpasswod"/><propertyname="connectionInitSqls"value="setnamesutf8mb4;"/><!--其他配置--></bean>
其他的数据库连接池如dbcp2,HikariCP都有connectionInitSqls属性。
关于“MySQL存储表情时报java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’错误怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。