MySQL字符集大小写不敏感导致的主键冲突问题记录

文章目录

    • 前言
    • 问题复原
      • (一)数据库
      • (二)表
      • (三)插入语句
      • (四) 解决
    • 参考资料

前言

数据入库的时候报了个主键冲突的error,很是纳闷于是乎开始排查摸索起来,发现是字符集导致字段值大小写不敏感导致的问题。记录一下加深映像

我们常用的MySQL的数据库创建数据库时可以指定它的字符集和排序规则如下:

CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

又或者如navicat创建时显示指定。平时我并没有太在意,只知道MySQL的utf8是个假的utf8 ,mysql中的utf8最多只能支持3bytes长度的字符编码,对于一些需要占据4bytes的文字,mysql的utf8就不支持了,要使用utf8mb4才行。对于排序规则我一般都用 utf8mb4_general_ci 脑子里只知道它对大小写不敏感,此次遇到的问题就和排序规则有关。
在这里插入图片描述

问题复原

(一)数据库

CREATE DATABASE devstore CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

(二)表

CREATE TABLE `t_main_area` (`id` varchar(128) COLLATE utf8mb4_general_ci NOT NULL,`alise_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`bpa_id` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`d5000id` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`rdfid` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`short_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`systemd5000id` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`systemid` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`up_level_zone_id` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

(三)插入语句

insert into t_main_area (id) VALUES ('Zg');
insert into t_main_area (id) VALUES ('ZG');

执行这2条语句就会报主键冲突的错误如下
在这里插入图片描述

(四) 解决

首先我们要知道:表字段中的 COLLATE(排序规则) 会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响**DISTINCTGROUP BYHAVING**语句的查询结果。另外,MySQL建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。总之,凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关。

很多COLLATE都带有_ci字样,这是Case Insensitive的缩写,即大小写无关也就是说"A"和"a"在排序和比较的时候是一视同仁的。selection * from table1 where field1="a"同样可以把field1为"A"的值选出来。与此同时,对于那些_cs后缀的COLLATE,则是Case Sensitive,即大小写敏感的。

常见的使用排序规则有utf8mb4_0900_ai_ci,utf8mb4_0900_ai_ci, utf8mb4_bin 前2者_ci 为后缀即大小写不敏感,utf8mb4_bin是二进制的对比大小写敏感。需要注意 从MySQL 8.0开始,默认的CHARSETutf8bmb4 默认的COLLATE是 utf8mb4_0900_ai_ci

综上所述,我此次遇到的问题就是字段的排序规则问题导致,只需要修改下表的字段的 COLLATE即解决。

执行以下sql 修改表的字段排序规则:

alter table t_main_area MODIFY COLUMN id varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin not null ;

在这里插入图片描述

参考资料

  • MySQL 之 COLLATE 关键字

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

归并排序及其非递归实现

个人主页:Lei宝啊 愿所有美好如期而遇 目录 归并排序递归实现 归并排序非递归实现 归并排序递归实现 图示: 代码: 先分再归并,像是后序一般。 //归并排序 void MergeSort(int* arr, int left, int right) {int* temp (int…

css的gap设置元素之间的间隔

在felx布局中可以使用gap来设置元素之间的间隔&#xff1b; .box{width: 800px;height: auto;border: 1px solid green;display: flex;flex-wrap: wrap;gap: 100px; } .inner{width: 200px;height: 200px;background-color: skyblue; } <div class"box"><…

VMware和别的服务器 ,组建局域网那些事 。

利用VMware &#xff0c;实现组件局域网、有可能会受限于WiFi&#xff08;路由器&#xff09; 。 通常不会&#xff0c;除非做了网关设置 相关知识&#xff1a; 禁用局域网隔离&#xff08;LAN Isolation&#xff09;&#xff1a; 某些路由器提供了一个选项&#xff0c;允许您禁…

从0到1基于ChatGLM-6B使用LoRA进行参数高效微调

从0到1基于ChatGLM-6B使用LoRA进行参数高效微调 吃果冻不吐果冻皮 ​ 关注他 cliniNLPer 等 189 人赞同了该文章 ​ 目录 收起 ChatGLM-6B简介 具备的一些能力 局限性 LoRA 技术原理 环境搭建 数据集准备 数据预处理 参数高效微调 单卡模式模型训练 数据并行模式模型训练 模型推…

怎么将自己拍摄的视频静音?详细步骤教会你~

大部分人都会遇到的一个问题&#xff0c;我们在拍摄视频时容易将嘈杂的背景音或环境音录进去&#xff0c;怎样解决这个问题呢&#xff1f;今天就来教大家具体操作步骤&#xff0c;只需用到这个软件即可&#xff01; 第一步&#xff1a;打开我们的【音分轨】APP&#xff0c;进入…

3561-24-8|荧光染料6-fam(Br4)|可作为成像剂

产品简介&#xff1a;6-fam(Br4)是一种荧光染料&#xff0c;广泛应用于生物医学领域中的荧光探针、标记物和成像剂等方面。其分子结构独特&#xff0c;具有良好的荧光量子产率和稳定性&#xff0c;能够在生物体内快速、准确地标记和追踪生物分子和细胞。其优异的荧光性能和化学…

环信web、uniapp、微信小程序SDK报错详解---登录篇

项目场景&#xff1a; 记录对接环信sdk时遇到的一系列问题&#xff0c;总结一下避免大家再次踩坑。这里主要针对于web、uniapp、微信小程序在对接环信sdk时遇到的问题。主要针对报错400、404、401、40 (一) 登录用户报400 原因分析&#xff1a; 从console控制台输出及networ…

学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础

目录 1.串口通信的基础知识串口通信(Serial Communication)同步/异步&#xff1f;全双工&#xff1f;常见的串口软件的参数 2.STC32的串口通信实现原理引脚选择&#xff1a;实现分时复用模式选择串口1模式1&#xff0c;模式1波特率计算公式 3.串口通信代码实现编写串口1通信程序…

MVCC和BufferPool缓存机制

文章目录 1. MVCC多版本并发控制机制2. BufferPool缓存机制 1. MVCC多版本并发控制机制 Mysql可以在可重复读隔离级别下可以保证事务较高的隔离性&#xff0c;这个隔离性是由MVCC机制来保证的&#xff0c;对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性&#…

SpringCloud(三)Sentinel、Seata、多级缓存

文章目录 Sentinel雪崩问题Sentinel与Hystrixsentinel使用案例限流规则流控模式流控效果热点参数限流 隔离和降级Feign整合Sentinel线程隔离熔断降级 授权规则与规则持续化自定义异常结果规则管理模式 Seata分布式事务问题理论基础CAP定理BASE理论 Seata架构部署TC服务微服务集…

软件测试「转行」答疑(未完更新中)

⭐ 专栏简介 软件测试行业「转行」答疑&#xff1a; 如果你对于互联网的职业了解一知半解&#xff01;不知道行业的前景如何&#xff1f;对于众说纷纭的引流博主说法不知所措&#xff01;不确定这个行业到底适不适合自己&#xff1f; 那么这一篇文章可以告诉你所有真实答案&a…

什么是全流程的UI设计?它与单页面的视觉设计有什么区别?

在软件产品研发流程中&#xff0c;产品交互设计一般是根据项目需求&#xff0c;做出设计方案&#xff0c;以求解决某个问题。而全流程的设计不再局限于短暂或者单个页面的视觉优化&#xff0c;而是追求持续性地参与&#xff0c;以全局性整体性地提升产品体验。 在软件内的信息传…