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属性。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
浅谈Java读写注册表的方式Preferences与jRegistry
本文研究的主要是Java 读写注册表的两种方式 Preferences 与 jRegistry的相关内容,具体介绍如下. 由于java程序是"write once, run everywhere",用java读写注册表,那程序的跨平台性就差了.java对注册表的操作,在jdk1.4以前的版本中,那是不可能的,只能用JNI来实现:然而jdk1.4之后提供的prefs包可以操作windows注册表,不过定死了root只在SOFTWARE/JavaSoft/prefs下,估计也是出于这种两难
-
详解Java对象的强、软、弱和虚引用+ReferenceQueue
详解Java对象的强.软.弱和虚引用+ReferenceQueue 一.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题. 二.软引用(SoftReference) 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回
-
Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析
先来看段代码 public class IntegerDemo { public static void main(String[] args) { String num = null; System.out.println( Integer.parseInt(num));// Exception java.lang.NumberFormatException System.out.println( Integer.valueOf(num));// Exception java.lang.Num
-
Java concurrency之AtomicReference原子类_动力节点Java学院整理
AtomicReference介绍和函数列表 AtomicReference是作用是对"对象"进行原子操作. AtomicReference函数列表 // 使用 null 初始值创建新的 AtomicReference. AtomicReference() // 使用给定的初始值创建新的 AtomicReference. AtomicReference(V initialValue) // 如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值. boolean compare
-
Java实现过滤掉map集合中key或value为空的值示例
本文实例讲述了Java实现过滤掉map集合中key或value为空的值.分享给大家供大家参考,具体如下: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * 过滤掉map集合中key或value为空的值 * @author lmb * @date 2017-3-14 */ public
-
Java中几个Reference常见的作用详解
前言 Java中几个Reference作用,也是面试的时候经常问到的问题,以前总是记一次忘一次,现在有时间,索性写个demo测试一把.下面来一起看看详细的介绍: 具体代码如下: JVM 参数: -Xmx10m -Xms5m -XX:+PrintGC SoftReference的时候: weakReference的时候: StrongReference: 由于strong是JVM默认的,这里就不做了,直接就是一点都不会被回收,直至OOM PhantomReference: 虚引用并不会改变内存回收
-
详解Java的call by value和call by reference
题目如下: Java传参的两种方式 call by value(值传递):传递的是值(针对基本数据类型),如传递一个整型数值.实际上,按值传递在方法调用方法中,参数只是实际参数的一份拷贝. call by reference(引用传递):传递的是对象的引用(针对对象),即传递的是对象的地址.实际上,引用按传递时候会产生一份新的引用拷贝,新旧两份引用同时指向同一个地址. 代码示例 public class TestJavaCallBy { // 测试值传递 public static void t
-
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:
-
MySql存储表情报错的排查解决
目录 前言 问题 排查解决 mysql变量配置扩展 补充 总结 前言 操作系统:linux 数据库版本: 8.0.27 查看版本命令:mysql -uroot -p 登录成功后就可以看到 问题 个人博客markdown插入标签后报以下错误 报错信息:Incorrect string value: '\\xF0\\x9F\\x98\\x82' for column 'content' at row 1 在网上查询得知:在用mysql进行表情符号存储时,会报错,这是由于Emoji表情是4个字节,而m
-
解决IDEA错误 Cause: java.sql.SQLException: The server time zone value的问题
在我们配置文件的时候 运行会报The server time zone的错 Cause: java.sql.SQLException: The server time zone value 错误源头 解决办法 添加如下的代码 不要忘了有? ?serverTimezone=Asia/Shanghai 再次运行即可 总结 到此这篇关于解决IDEA错误 Cause: java.sql.SQLException: The server time zone value的问题的文章就介绍到这了,更多相关ID
-
MySQL在grant时报错ERROR 1064 (42000)的原因及解决方法
网上查到的grant方式大多会报错,主要原因是MySQL版本8.0后不能再使用原来的方式 查询MySQL版本 SELECT version(); 在8.0版本下 grant all privileges on test.* to test@'%' identified by '123456'; 报错 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
-
java.sql.SQLException: 内部错误: Unable to construct a Datum from the specified input
Q: I am working with Oracle database 8.1.7 and I have written a JAVA code to update the table which contains one BLOB field . I am using updateBinaryStream method of resultset to update the BLOB field but it is failing after giving following exceptio
-
MySQL修改安全策略时报错:ERROR 1193 (HY000)的解决办法
我使用的版本是MySQL5.73,环境是Linux CentOS7,其他版本不知道是否可行,望谅解. 当我们想设置简单的密码的时候,看了别人发的如何修改安全策略的代码,如下: set global validate_password_policy=0; set global validate_password_length=1; 但是当我们使用的时候,却报了这样一个错误: 这是说你启动没有安全检查插件 启动方法如下: 首先打开/etc/my.cnf,然后在[mysqld]的下方加入如下代码: p
-
SQL Server 完整备份遇到的一个不常见的错误及解决方法
1. 错误详情 有一次在手动执行数据库完整备份时遇到如下错误: 执行多次都是这个错误信息. 提示无法生成检查点,原因可能是由于系统资源(如磁盘或内存空间)不足或者有时是由于数据库损坏而造成的. 我们检查数据库资源可以排除磁盘资源不足的情况. 2.检查点相关知识 事务日志.数据文件 和checkpoint的关系. 在SQL Server中,进行insert, update, delete时,数据并没有直接写入数据库对应的mdf文件中,而是写入了缓存里,这时,就要提到一个非常重要机制:CheckPo
-
解决Mysql服务器启动时报错问题的方法
一.概述 文章主要介绍因为启动mysql服务报错引发的问题:"ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)",顺带扩充一些其它的知识点,当前版本是red hat 6,mysql 5.6. 二.步骤 报错的源头 问题解决 1.权限 报错的源头就是它了,一般这种问题首先会想到的就是权限问题,就是/var/lib/mysql该文件夹的权限 上图可以看到my
-
sql 2005不允许进行远程连接可能会导致此失败的解决方法
(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 网站的数据库连接语句为:Server=127.0.0.1;uid=sa;pwd=xxx;database=xxx 经测试把server=127.0.0.1改为"server=."或"server=机器名",都可以正常连接: 所以只有在用IP时不能连接,经分析,解决方法如下: 1.打开Sql Server 2005 "配置工具" 中的&qu
-
Mysql optimize table 时报错:Temporary file write fail的解决
目录 1. 问题描述 2. 解决方案 1. 问题描述 当我们执行 optimize table xxx ; 尝试进行碎片整理时,也可能报错 Temporary file write failure. Tips: MySQL 8.x # 执行 optimize 命令时会发现报错 mysql> optimize local table t_word; +-------------------------+----------+----------+--------------------------
随机推荐
- VBS教程:方法-Items 方法
- document.all与getElementById、getElementsByName、getElementsByTagName用法区别-document.all第1/2页
- 非常漂亮的JS+CSS图片幻灯切换特效
- 详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
- asp.net 取消缓存相关问题说明
- C#网络爬虫代码分享 C#简单的爬取工具
- 微信小程序 animation API详解及实例代码
- mybatis 插件: 打印 sql 及其执行时间实现方法
- 通过软件修改Win2008默认远程桌面连接端口3389
- 收藏哲理配色技巧
- 详解CentOS阿里云云服务器硬盘分区及挂载
- 教你如何架设办公室FTP服务器以Serv-U为例
- Apache加速模块mod_pagespeed安装使用详细介绍
- VC++ 中ListCtrl经验总结
- 《诚实与谦虚》令你的人际如鱼得水
- Python简单实现查找一个字符串中最长不重复子串的方法
- Swift实现“或”操作符的3种方法示例
- Laravel认证原理以及完全自定义认证详解
- 微信小程序遍历Echarts图表实现多个饼图
- 开发中常用的25个JavaScript单行代码(小结)