mysql中特殊字符存储,如表情字符

news2024/11/25 16:21:36

一.问题:出现下面异常说明是不能存储特殊字符

### Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x81' for column 'column1' at row 1
; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x98\x81' for column 'column1' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x81' for column 'column1' at row 1]

二.解决过程及方法

这个问题是由于数据库的编码方式引起的,首先我们来了解一下utf8和utf8mb4的区别

utf8一般是指UTF-8,是针对Unicode的一种可变长度字符编码,每个字符最多三个字节,有时候也称为utf8mb3。 

utf8mb4是utf8的超集,mb4就是most bytes 4的意思,专门用来兼容四字节的Unicode,MySQL在5.5.3之后增加了utf8mb4的编码。 

MySQL支持的utf8编码最大字符长度为3字节,如果遇到4字节的宽字符就会插入异常了。三个字节的utf8最大能编码的Unicode字符是0xffff,任何不在基本多文本平面的Unicode字符,都无法使用MySQL的utf8字符集存储,包括emoji表情和很多不常见的汉字,以及任何新增的Unicode字符等。如果要在MySQL中保存4字节长度的utf8字符,需要使用utf8mb4字符集。 

注意:mysql在5.5.3.及以上版本支持utf8mb4

由以上可以看出,我们想存储emoji表情包,那么数据库的编码方式需要是utf8mb4的,接下来我们来看看数据库和数据库链接的配置:

查看数据库编码,可以看到数据库编码已经是utf8mb4

show variables like 'character_set_database';

查看项目中数据库链接的配置,可以看到设置了characterEncoding=utf8

jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.db}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

注:不论是使用utf8编码还是使用utf8mb4,数据库链接url中characterEncoding都设置为utf8(或者UTF-8),没有characterEncoding=utf8mb4这种写法


既然数据库编码是utf8mb4,且数据库链接url中已经设置了characterEncoding=utf8,为什么emoji存储还是报错呢?

经研究发现,原来是pom.xml中的mysql-connector-java版本号在作祟

mysql-connector-java各版本对utf8mb4字符集的支持如下:

项目中使用的mysql-connector-java版本号为5.1.45,由上面的表格可知,需要设置mysql服务端配置文件:

vi /etc/my.cnf 

[mysqld] 
character-set-server=utf8mb4 

设置好之后,重启mysql服务,再次运行项目服务,emoji表情包已经可以写入数据库表中了

有时候,我们并没有修改mysql服务端配置文件和重启mysql服务的权限,这时候可以采用把mysql-connector-java版本号修改为5.1.47及以上或者8.0.13及以上的方式,修改版本号后不用再修改mysql服务配置文件即可存储emoji表情包。

不过mysql-connector-java的版本号也不是我们想修改成啥就修改成啥的,它和mysql版本及java版本都有关系:

mysql-connector-java与Mysql对应版本:

其中:官方更推荐MySQL 5.6以上使用connector/j 8.0

mysql-connector-java与Java对应版本:

其中:JRE 1.7需要connector/J 5.1.21以上

说到这里,大家应该知道如何解决emoji存储的问题了:首先根据mysql版本和Java版本选择对应的mysql-connector-java,再根据mysql-connector-java版本选择对应的解决方案。

三可能遇到的问题

1.除过常规方法重启mysql服务器外,有如下方法

(1)没有sudo或者systemctl命令时可以使用 /etc/init.d/mysql restart

(2) 使用systemctl stop mysqld.service-->systemctl start mysqld.service

2.如果出现下面异常,表示链接多次加入黑名单需要刷新数据库,命令:mysqladmin -uroot -proot -h 127.0.0.1 flush-hosts

java.sql.SQLException:null,message from server:"Host '127.0.01' is blocaed because of many connnection errors; unblock with 'mysqladmin flush-hosts"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UPS 原理和故障案例分享

摘要:不间断电源UPS (Uninterruptible Power System),主要是由整流器、 逆变器、静态旁路和储能装置等组成;具备高可靠性、高可用性和高质量的独立 电源。通过对收集的 UPS 故障案例进行分析,从施工,调试和运行三个方面筛选 出四个故障案例与…

构建高效问题解答平台:使用Cpolar和Tipas在Ubuntu上搭建专属问答网站

文章目录 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4. 公网访问测试5. 结语 前…

什么是实验室超声消泡机?工作原理是怎样的?

超声波消泡设备也叫超声波脱气机、超声波消泡机、超声波消泡器。超声波在液体中产生空化作用,使得液体中溶解的气体(如:空气)不断凝聚,成为很细小的气泡,最后成为球状气泡脱离液体表面,从而达到液体脱气、液体消泡的目的。 实验室超声消泡机工作原理: …

买了个Oppo Reno6用于测试

这一段时间开发摄像头APP,一直用手头的主力机。摄像头APP要求经常拔插,担心损坏。而手头的几个USB线似乎也有问题,经常连着电脑就断线。于是决定买个手机用于测试。 经过挑选买了个二手的RENO6,个头小,与手头的X70 PR…

Numpy(二) 元素与数组的操作

Numpy(二) 元素与数组的操作 一、元素的索引访问 1.一维数组索引访问 ①Numpy一维数组索引访问与python内置序列类型索引访问一样,都使用中括号下标([index]) ②正值索引/负值索引 正值索引:0 1 2 3 4 5 a数组&#xff…

Android Studio Giraffe | 2022.3.1

Android Gradle 插件和 Android Studio 兼容性 Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件 (AGP) 添加了几项专用于构建 Android 应用的功能。下表列出了各个 Android Studio 版本所需的 AGP 版本。 如果您的项目不受某个特定版本的 Andr…

专业课138,总分390+,西工大,西北工业大学827信号与系统考研分享

数学一 考研数学其实严格意义上已经没有难度大小年之分了,说21年难的会说22年简单,说22年简单的做23年又会遭重,所以其实只是看出题人合不合你的口味罢了,建议同学不要因偶数年而畏惧,踏踏实实复习。资料方面跟谁就用…

实用的窗口管理软件:Display Maid for Mac

Display Maid 是一款用于 macOS 平台的窗口管理工具,它可以帮助用户更高效地管理和组织他们的应用程序窗口。Display Maid 提供了一系列功能和快捷键,使用户可以轻松地调整窗口的位置、大小和布局,以适应不同的工作环境和需求。 以下是 Disp…

基于Java的家庭食谱管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

ubuntu服务器启动报错UNEXPECTED INCONSISTENCY解决方法

遇到这种情况,按照出错提示来进行处理一般不会有问题,我这里尝试使用命令fsck修复出错的分区: 我使用的是:umount /dev/sdb3 然后提示卸载错误(所以这一步不是到是否有用) 修复: fsck -y /dev/sdb3 ,最后挂载分区上去:mount /dev/sdb3 /da…

基于ebpf的性能工具-bpftrace

在前面我已经分享了关于ebpf入门的文章:基于ubuntu22.04-深入浅出 eBPF。这篇文章介绍一个基于ebpf技术的强大工具–bpftrace。 在现代计算机系统中,了解系统的内部运行情况对于诊断问题、优化性能以及进行安全监控至关重要。bpftrace作为一款强大的跟踪…

BUUCTF学习(8): 随便注,SQL

1、介绍 2、解题 1;set sql_modePIPES_AS_CONCAT;select 1 结束

FL Studio 21.1.3750中文完整至尊版2023最新破解版免费下载

FL Studio 21.1.3750中文完整至尊版2023最新破解版免费下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室,因为它包含了一个主要的听觉工作场所。最新fl studio 21中文版 版有不同的功能,如它包含图形和音乐音序器,帮助您…

MT4选网页版还是桌面版?anzo capital昂首资本分析优劣

很多投资者在进行交易的时候,MT4和MT5是必不可少的,但很多投资者会有这样的一个困惑?选网页版还是桌面版呢?下面anzo capital昂首资本就和各位投资者一起了解每个版本的优劣,从而根据自己的实际情况作出选择。 众所周…

适配LVGL界面图片和文字显示很虚,色阶明显的解决方法(全志R128适用)

LVGL界面图片和文字显示很虚,色阶明显的具体问题情况如下图 初步分析为RGB参数问题,先调出Colorbar检查一下 disp -c 0 8 显示如下,无异常 disp -c 0 1 显示如下,有条纹 此时问题可能出现在两个方向 1、rgb接线不稳定有干扰 2、…

巧妙实现重复渐变边框

巧妙实现重复渐变边框 html 结构 <div class"card"><div class"container">在 install 事件中&#xff0c;我们打开了一个名为 my-site-cache-v1的缓存&#xff0c;并将页面资源添加到缓存中。在 fetch事件中&#xff0c;我们首先检查缓存中…

各类证件的版面信息收集

香港身份证的版面分析&#xff1a; 证件页面&#xff1a; 相关的版面信息&#xff1a; 该页面包含香港身份证的信息&#xff0c;可以用于版面分析&#xff1b; 信息来源&#xff1a;香港不同证件说明大汇总|回乡证|居民身份证|护照|永居_手机网易网 台湾通行证号码&#xf…

家居建材小程序商城开发

家居建材小程序商城开发&#xff0c;一站式打造理想之家&#xff0c; 支持各种社交分享和三级分销&#xff0c;B2C双向业务&#xff0c;系统稳定&#xff01; 家居建材商城系统需要具备哪些功能呢&#xff1f; 1. 商品展示&#xff1a;家居建材商城系统将家居建材产品按照分类…

高效解决方案:Java轻松批量查找与替换Excel文本

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在 Excel 中&#xff0c;我们经常会使用快捷键CtrlF和CtrlH对查找的内容进行替换…

MISRA C++:2023,您需要了解的下一个MISRA信息

MISRA C&#xff1a;2023是备受期待的MISRA C标准的下一个版本&#xff0c;预计将于今年晚些时候发布。这个新版本将整合AUTOSAR C 14指南&#xff0c;并支持最新版本的C。 MISRA的C和C编码指南不仅是汽车行业的最佳标准&#xff0c;也是使用嵌入式系统的任何行业的最佳标准。…