Java 支持表情包存储 Incorrect string value: ‘\\xF0\\x9F\\x98\\x8A\\xF0\\x9F...‘

2024-01-06 23:44

本文主要是介绍Java 支持表情包存储 Incorrect string value: ‘\\xF0\\x9F\\x98\\x8A\\xF0\\x9F...‘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,前言

最近测试提出了一个比较刁钻的bug

在提交表单数据的时候,支持表情输入,如下

在这里插入图片描述

看了一下前端参数,也是正常传递

在这里插入图片描述

但是调用接口的时候,后端却报错

Cause: java.sql.SQLException: Incorrect string value:
'\\xF0\\x9F\\x98\\x8A\\xF0\\x9F...' for column 'approval_opinions'

二,原因分析

Emoji表情符号为4个字节的字符,而 utf8 字符集只支持1-3个字节的字符,导致无法写入数据库。
既然如此把数据库编码修改成utf8mb4不就行了,所以进行一番折腾。

三,实操演练

修改数据库表的编码方式

1,先查看

 show CREATE DATABASE `test`;show create table course ; 

在这里插入图片描述

2,course 表的几个字段编码格式不对,执行sql修改

alter table course change course_no course_no varchar(5) character set utf8mb4;
alter table course change course_name course_name varchar(100) character set utf8mb4;
alter table course change teacher_no teacher_no varchar(3) character set utf8mb4;

修改后:

在这里插入图片描述

3,执行sql测试,成功插入表情包

INSERT INTO test.course
(id, course_no, course_name, teacher_no)
VALUES(11, '12', '1哈😊喜喜🤣😍🙌👍', '3');

在这里插入图片描述

4,再写个保存接口,调用一下试试

在这里插入图片描述

数据成功写入

在这里插入图片描述

四,针对测试人员提出的bug的解决方案

1,查询创建表信息,编码正确,但是接口还是报错

CREATE TABLE `approve_log` (`id` bigint(20) NOT NULL COMMENT '主键id',`approval_opinions` text COMMENT '审批意见',PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

2,最终有效的处理方式,修改项目配置

> 1,spring.datasource.url配置去除characterEncoding=utf8 
> 2,添加一行配置spring.datasource.druid.connection-init-sqls=SET NAMES utf8mb4

spring.datasource.druid.connection-init-sqls=SET NAMES utf8mb4,这条配置的意思是,当一个新的数据库连接被创建时,它将执行SET NAMES utf8mb4这个SQL命令。这个命令是用来设置数据库连接的字符集为utf8mb4。

为什么要这么做?

utf8mb4是一个字符集,可以支持更多的字符,包括emoji表情符号。如果你需要存储emoji或者其他一些特殊的Unicode字符,使用utf8mb4是一个好的选择。

总结:

这个配置是用来确保数据库连接使用utf8mb4字符集,从而能够支持更多的字符。

这篇关于Java 支持表情包存储 Incorrect string value: ‘\\xF0\\x9F\\x98\\x8A\\xF0\\x9F...‘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/578020

相关文章

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu