关于SQLException: Illegal mix of collations (`utf8mb4_general_ci,IMPLICIT`)...错误

希望文章能给到你启发和灵感~
如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~

阅读指南

  • 开篇说明
  • 一、基础环境说明
    • 1.1 硬件环境
    • 1.2 软件环境
  • 二、报错信息
  • 三、最后

开篇说明

记录一个查询错误
场景:数据库之间某表复制移动;复制源数据库能正常使用,复制后的数据库在进行联表查询时出现的关于数据库排序规则相关的异常报错;

一、基础环境说明

考虑环境因素,大家适当的对比自己的软硬件环境情况分析~请仔细阅读硬件、软件环境

1.1 硬件环境

MacOS Monterey 版本 12.6.8 Apple M1

1.2 软件环境

开发工具:Idea 2021navicat 15
编译环境:Java 1.8.0_171,mybatis 3.0+
数据库:mysql8.0

二、报错信息

Cause: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation ‘=’
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1267]; Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation ‘=’; nested exception is java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation ‘=’

从异常错误信息,能定位到问题出错的点在于sql查询,错误相关是排序规则的问题;
【1】首先确认我们的数据库两边这块的配置是否是一致的;
在这里插入图片描述

【2】定位到我们的查询语句是哪句SQL;例如我这里是涉及多张表的联表查询;

SELECT
		a.id AS "id",
		a.create_by AS "createBy.id",
		a.create_date AS "createDate",
		a.update_by AS "updateBy.id",
		a.update_date AS "updateDate",
		a.remarks AS "remarks",
		a.del_flag AS "delFlag",
		a.materialId AS "materialId",
		m.model AS "model",
		a.machineNo AS "machineNo",
		m.materialname AS "materialName",
	    m.materialcode AS "materialCode",
	    m.voltage AS "voltage",
		m.unit AS "unit",
		s.status AS "status",
		a.isWaste AS "isWaste",
		a.maintenance_time AS "maintenanceTime",
		a.maintenance_content AS "maintenanceContent"
		FROM ossc_maintenance a
		INNER JOIN ossc_material m ON (m.id = a.materialId)
		INNER JOIN ossc_stock_detail s ON (a.machineNo = s.machine_no)

通过命令查询两个数据库的相关表是否有存在数据排序的规则的冲突和不同;然后我们主要用命令修改有区别的表的排序规则即可;

// 查询所有与排序规则(collation)相关的系统变量
show variables like 'collation_%';
// 查看某个表(假设表名为table_name)的创建语句,包括其字符集(character set)和排序规则(collation)等详细信息
show create table ossc_stock_detail;
// 修改了表的默认字符集和校对规则,并转换了表中所有列和数据的字符集和校对规则
ALTER TABLE ossc_material convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

三、最后

【1】show variables like ‘collation_%’; 该命令在不同版本mysql或配置中返回的可能不同;如我这里是返回:
在这里插入图片描述
collation_connection:代表当前连接的排序规则。
collation_database:代表当前数据库的默认排序规则。
collation_server:代表服务器的默认排序规则。

其他可能的返回值:
character_set_connection:代表当前连接的字符集。
character_set_database:代表当前数据库的默认字符集。
character_set_results:代表查询结果的字符集。
character_set_server:代表服务器的默认字符集。
character_set_system:代表系统元数据的字符集(通常是utf8,且不可更改)。
collation_client:代表客户端的排序规则,这通常与character_set_connection和collation_connection相对应

【2】在做数据库的复制移动时,要注意两个库之间的排序规则和字符集;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

写python代码,怎么用工厂模式思维设计接口?

接口的好处 接口就是抽象方法,用来设计后架构,后端开发者和客户端调用者都可以使用这个接口规则同步写代码,客户端调用者(app、网页甚至时自动化接口测试)不用担心后端对接口的实现细节具体是什么样子的。直接去调用就…

数据结构--二叉树遍历

目录 1.介绍 (1)前序遍历 (2)定义结构体 (3)前序遍历实现 (4)中序遍历实现 (5)二叉树的节点个数 (6)二叉树树叶节点个数 &…

SpringBoot整合Swagger报错:Failed to start bean ‘documentationPluginsBootstrapper

文章目录 1 问题背景2 问题原因3 修改SpringBoot配置文件 application.properties参考 1 问题背景 Swagger是SpringBoot中常用的API文档工具,在刚接触使用的时候,按照通用的代码进行配置,发现报错了 [main] ERROR org.springframework.boot…

计算机的错误计算(三十二)

摘要 在计算机的错误计算(二十八)与(三十 一)中,我们探讨了 Visual Studio 对 6个随机exp(x)函数的计算精度问题。根据网友的反馈,本节将展示 Python 对它们的输出:结果几乎与 Visual Studio …

DataBricks Best Practice for Delta Lake

本文介绍了使用 Delta Lake 时的最佳做法。 Databricks 建议使用预测性优化。 请参阅 Delta Lake 的预测性优化。 删除并在同一位置重新创建表时,应始终使用 CREATE OR REPLACE TABLE 语句。 请参阅删除或替换 Delta 表。 移除旧版 Delta 配置 Databricks 建议在升…

实现将Nginx的每个网站配置单独的访问日志

一、问题描述 Nginx默认的访问日志是不会区分哪个网站有哪些日志的,全部糅杂在一起;如果需要哪个网站有哪些访问日志记录,还需要将访问日志下载下来后筛选,比较麻烦;希望将每个网站对应的日志能够单独记录到对应的日志文件里面,方便排查和管理。 # 进入Nginx默认的日志文…

FastAPI 学习之路(四十九)WebSockets(五)修复接口测试中的问题

其实代码没有问题,但是我们忽略了一个问题,就是在正常的开发中,肯定是遇到过这样的情况,我们频繁的有客户端链接,断开连接,需要统一的管理这些链接,那么应该如何管理呢。其实可以声明一个类去管…

Spring容器Bean之XML配置属性的细节

1、简单值注入使用&#xff1c;property&#xff1e;的value属性可以换一种写法 2、简单值注入使用&#xff1c;property&#xff1e;的value属性值中有些特殊的字符&#xff0c;比如< 、> 的时候可以用包裹 3、对象注入使用&#xff1c;property&#xff1e;的ref属性时…

二 GD32 MCU 烧录说明

GD32 MCU提供了多种烧录方法&#xff0c;可在调试和生产等阶段进行便捷的烧录。GD32目前主要烧录方法有ISP烧录、SWD/JTAG在线下载、脱机烧录三种类型。 ISP烧录&#xff1a;使用串口或USB即可烧录&#xff0c;无需特殊工具支持。可根据协议自行定制下载方式&#xff0c;需要控…

请你谈谈:AnnotatedBeanDefinitionReader 显式地注册一个Bean到Spring容器,以及注册并解析配置类

为了深入探讨Spring框架中的beanDefinition对象&#xff0c;我们不可避免地要提及BeanFactoryPostProcessor这一核心类&#xff0c;它作为Spring的bean工厂后置处理器发挥着关键作用。接下来&#xff0c;我们将详细讨论BeanFactoryPostProcessor的执行时机&#xff0c;这是一个…

人工智能 (AI) 应用:一个高精度ASD 诊断和照护支持系统

自闭症谱系障碍&#xff08;ASD&#xff09;是一种多方面的神经发育状况&#xff0c;影响全球大约1/100的儿童&#xff0c;而在中国&#xff0c;这一比例高达1.8%&#xff08;引用自《中国0&#xff5e;6岁儿童孤独症谱系障碍筛查患病现状》&#xff09;&#xff0c;男童为2.6%…

ns3-gym入门(三):在opengym基础上实现一个小小的demo

因为官方给的"opengym""opengym-2"这两个例子都很简单&#xff0c;所以自己改了一个demo&#xff0c;把reward-action-state相互影响的关系表现出来 一、准备工作 在ns3.35/scratch目录下创建一个文件夹&#xff1a; &#xff08;后续的运行指令后面都需要…

C++字体库开发之字符显示四

freetype提取路径&#xff0c;转svg显示 std::string FontPath::toSvg(const Segment &seg) const {if (seg.pts.empty())return "";std::ostringstream strStream;for (const auto &pt : seg.pts) {if (!strStream.view().empty())strStream << &quo…

【linux】服务器重装系统之系统盘写入准备

【linux】服务器重装系统之系统盘写入准备 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 文章目录 【linux】服务器重装系统之系统盘写入准备一、前期准备1、准备一个U盘&#xff0c;并进行格式化2、下载UltralSO工具3、下载对应的Ubuntu版本 二、写入操作教程 一、…

gorm多表联合查询 Joins方法 LEFT JOIN , RIGHT JOIN , INNER JOIN, FULL JOIN 使用总结

gorm中多表联合查询&#xff0c;我们可以使用Joins来完成&#xff0c;这个Joins方法很灵活&#xff0c;我们可以非常方便的多多表进行联合查询&#xff0c; 我们先来看看这个方法的官方定义和使用示例&#xff1a; Joins方法定义和使用示例 当然我们这里要说的使用方式是官方示…

nginx生成自签名SSL证书配置HTTPS

一、安装nginx nginx必须有"--with-http_ssl_module"模块 查看nginx安装的模块&#xff1a; rootecs-7398:/usr/local/nginx# cd /usr/local/nginx/ rootecs-7398:/usr/local/nginx# ./sbin/nginx -V nginx version: nginx/1.20.2 built by gcc 9.4.0 (Ubuntu 9.4.0…

Vue.js 中的 immediate: true的作用

在使用 Vue.js 时&#xff0c;监听器 (watchers) 是一种非常重要的工具&#xff0c;它允许我们观察和响应数据的变化。 immediate: true 的作用 默认情况下&#xff0c;监听器只有在所监视的数据属性发生变化时才会触发回调函数。然而&#xff0c;有时候我们需要在组件初始化时…

Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器

章节内容 上节我们完成了&#xff1a; ZNode的基本介绍ZNode节点类型的介绍事务ID的介绍ZNode实机测试效果 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff…

LVS+Nginx高可用集群---keepalived原理与实战

1.高可用集群架构keepalived双机主备原理 高可用&#xff1a;(HA) 部署nginx存在两台nginx。当主节点的nginx宕机停止服务的时候&#xff0c;nginx备用机起到跟nginx(主) keepalived的概念&#xff1a;解决单点故障&#xff1b;组件免费&#xff1b;可以实现高可用HA机制&…

《0基础》学习Python——第十一讲

一、lambda 匿名函数 lambda函数是一种匿名函数。它是一种快速定义单行函数的方法。与常规函数不同&#xff0c;lambda函数没有名称&#xff0c;也没有使用def关键字来定义。lambda函数通常用于一些简单的函数&#xff0c;可以在代码中快速定义和使用&#xff0c;而不需要为其定…