MySQL java.sql.SQLException: Incorrect string value

2024-08-27 15:58

本文主要是介绍MySQL java.sql.SQLException: Incorrect string value,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境

Java:1.8
MySQL:5.7.18

前言

调用接口时,报了个这样的错误:

java.sql.SQLException: Incorrect string value: '\xE8\xB4\xA6\xE6\x88\xB7...' for column 'accountName' at row 1

查阅后,知道是字符编码问题造成的;

解决

知道原因后,对面表右键选择设计表 - 选项 - 默认字符集

在这里插入图片描述

之后再试接口,发现错误依然存在;

网上基本都是告诉你如下操作:

在mysql的安装目录下有一个文件叫做my.ini。
在其中添加两句:
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
然后进行重启。
重启之后再次来到创建的那张表,执行语句:
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin; (将TABLE_NAME替换成你的表名)

但是呢?在我目前的公司,我可以操作数据库,可以增删表,但是我没办法重启数据库,也没有权限去修改my.ini文件,因为被devops统一管理着。

我好奇的是,表已经设置为utf8mb4了,为什么还是报错,后来我在表里写中文试试,结果却是???
在这里插入图片描述

查阅资料得知到:

为什么都改了utf8mb4还是不行呢?这个错误主要是对mysql的字符集了解的不够全面。mysql的字符集的作用域有三个层级一个数据库级,一个是表级,一个是列级(字段级别的)。优先级是:列级》表级》数据库级。

接着我们进行如下操作:

查看数据库字符集

show variables like '%character%';

在这里插入图片描述

查看列的字符集

show full columns from patientwithdrawapplication

在这里插入图片描述
可以看出 列的字符集 依然不对

修改列的字符集

alter table patientwithdrawapplication MODIFY bankCity varchar(50) charset utf8mb4;

修改后的结果
在这里插入图片描述

最后一点总结:

对于mysql字符集我们不想出现乱码情况有一个经验就是character_set_client、character_set_connection、character_set_results字符尽量设置成一致的。
set names utf8mb4
这条语句等同于对上面三个参数的配置成utf8mb4。在插入和查询emoji字符的时候,不要忘了在前面加上这个语句,以防止出现乱码。

刚开始,我以为只需要执行:

set names utf8mb4

就可以了,对于列而言,还是不行,还是需要执行这样的命令才能修改:

alter table patientwithdrawapplication MODIFY bankCity varchar(50) charset utf8mb4;

参考地址:
mysql设置了字符集utf8mb4依然无法插入emoji字符

这篇关于MySQL java.sql.SQLException: Incorrect string value的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

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

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

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

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

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

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

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

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3