MySQL列大小写敏感

一、背景知识

字符集COLLATE

1、字符集是一套符号和编码,COLLATE是在字符集内用于比较字符的一套规则。通常的字符集都是utf8mb4(8.0默认)。

2、在mysql中,字符类型的列,比如:char、text、varchar等类型的列,都需要有collate和mysql进行交互,告诉mysql这些列该如何进行排序。

因此,COLLATE和orderby、distinct、group by、having语句息息相关,同时也会影响where条件中大于小于等于的查询。

3、不同的COLLATE下会影响mysql的索引使用

4、utf8mb4编码的默认值为utf8mb4_general_ci

utf8mb4_bin:将字符串每个字符用二进制数据编译存储,其数据比较方法其实就是直接将所有字符看作二进制串,然后从最高位往最低位比对。所以很显然它是区分大小写的。

utf8mb4_general_ci:没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

utf8_general_ci校对规则进行的比较速度很快,但是与使用 utf8mb4_unicode_ci的校对规则相比,比较正确性较差

utf8mb4_unicode_ci:是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

5、总结:general_ci 更快,unicode_ci 更准确、utf8mb4_bin对字符大小写敏感。(补充:现在的CPU来说,它远远不足以成为考虑性能的因素,索引涉及、SQL设计才是。使用者更应该关心字符集与排序规则在db里需要统一。)

二、分析:

默认字符比较规则(utf8mb4_general_ci)是不区分大小写的(utf8mb4_unicode_ci也不区分)

2.1 ci即case insensitive,不区分大小写即大小写不敏感。"A"和"a"在排序和比较的时候是一视同仁。

selection * from test where cloumn="a"同样可以把cloumn为"A"的值选出来。对于mysql来说,'a'和‘A’没有区别

2.2 大小写敏感(case sensitivity)是指使用大写字母、小写字母造成不同效果的情况。

eg:使用单据号作为唯一键: 数据001A落表的时候会变成001a,因为mysql默认是不区分大小写的。

这样,当表里面有001a的时候 & 其是唯一键,再存001A就会导致唯一键冲突。

2.3 情景复现:

  • 表里面已经有name = "aaaa"的数据

  • name字段是唯一键

  • name为字符串,且为ci格式

  • 再次插入数据name = 'AAAA’时,就会报错。唯一键冲突

    复现

2.4 解决:utf8mb4_unicode_ci或utf8mb4_general_ci ==> utf8mb4_bin

  • 方式一:改变表的属性,区分表中字符串的列,使所有字符列都区分大小写
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE TABLE `user` (`order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '单号',UNIQ_KEY `order_no` (`order_no`) COMMENT '唯一索引'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=''这里的建表语句,使用的是COLLATE=utf8mb4_unicode_ci,这种方式创建的表中的字符串字段,都是不区分大小写的。

默认方式创建的,单据号字段:order_no:是不区分大小写的,即大小写最终都是小写,这样就会造成唯一键冲突。

  • 方式二:也可以针对某一字符的字段属性,utf8mb4_bin

    alter table zebra_mybatis_test modify column `name` varchar(128) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '姓名';
    

2.5、sop

默认表的创建,还是使用:ENGINE=InnoDB AUTO_INCREMENT=1265 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=‘xxxx’

但是,当业务需要某个字段,区分大小写。即大小写不同有不同的含义时,则需要将字段设置为大小写敏感,即utf8mb4_bin

补充:

更多的时候,还是要考虑是否要区分大小写,比如:用于存用户登陆的账号、密码。密码就必须大小写敏感。需要根据具体的业务确定

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

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

相关文章

算法leetcode|83. 删除排序链表中的重复元素(rust重拳出击)

文章目录 83. 删除排序链表中的重复元素:样例 1:样例 2:提示: 分析:题解:rust:go:c:python:java: 83. 删除排序链表中的重复元素: 给…

ChatGLM GPT原理介绍

图解GPT 除了BERT以外,另一个预训练模型GPT也给NLP领域带来了不少轰动,本节也对GPT做一个详细的讲解。 OpenAI提出的GPT-2模型(https://openai.com/blog/better-language-models/) 能够写出连贯并且高质量的文章,比之前语言模型效果好很多。GPT-2是基于Transformer搭建的,相…

注解,自定义注解

一、什么是注解 二、自定义注解 /*** 自定义注解*/public interface MyAnnotation {String aaa();boolean bbb() default true;String ccc(); }MyAnnotation ( aaa "牛魔王",ccc "sss") public class Test {MyAnnotation ( aaa "aaa",ccc &q…

vue 使用cornerstone解析 .dcm 文件

// 首先下载依赖 npm install --save cornerstone-core cornerstone-math cornerstone-tools hammerjs cornerstone-web-image-loader 下载之后再package.json中可以看到最后图片的依赖// 下面是完成的组件代码 <template><div id"dicom_canvas" refdicom_c…

第75步 时间序列建模实战:多步滚动预测 vol-3(以决策树回归为例)

基于WIN10的64位系统演示 一、写在前面 上两期&#xff0c;我们讲了多步滚动预测的第两种策略&#xff1a; 对于重复的预测值&#xff0c;取平均处理。例如&#xff0c;&#xff08;1,2,3&#xff09;预测出3.9和4.5&#xff0c;&#xff08;2,3,4&#xff09;预测出5.2和6.…

物联网的未来:连接的智能世界

物联网&#xff08;IoT&#xff09;是引领我们走向未来的一项关键技术。它让物品通过互联网进行连接&#xff0c;交流&#xff0c;开创了智能生活新时代。预计到2025年&#xff0c;全球将拥有超过410亿的IoT设备。在对人类生活的每个方面产生影响的同时&#xff0c;物联网也正在…

【ardunio】青少年机器人四级实操代码(2023年9月)

目录 一、题目 &#xff08;一&#xff09;试题原题 &#xff08;二&#xff09;试题解读 1、欢迎区和欢送区范围 &#xff08;1&#xff09;符合习惯 &#xff08;2&#xff09;以门为参考点会有不反应区 &#xff08;3&#xff09;以门为参考点门里门外不反应区不对称…

virtualbox配置ubuntu1804虚拟机相关流程

virtualbox配置ubuntu1804虚拟机相关流程 相关版本能解决的问题安装流程1&#xff1a;新建虚拟机安装流程2&#xff1a;配置虚拟机安装流程3&#xff1a;安装虚拟机系统安装流程4&#xff1a;设置ubuntu 相关版本 virtualbox使用VirtualBox官网下载的6.1.34 r150636 版。ubunt…

2023年Android Gradle、Gradle插件以及Kotlin版本升级记录

Compose和kotlin版本对应关系&#xff1a;https://androidx.dev/storage/compose-compiler/repository gradle版本和gradle插件版本对应关系&#xff1a; https://developer.android.google.cn/studio/releases/gradle-plugin?hlzh-cn gradle最新版本在这里找&#xff1a;http…

面试题 05.02. 二进制数转字符串

面试题 05.02. 二进制数转字符串 二进制数转字符串。给定一个介于0和1之间的实数&#xff08;如0.72&#xff09;&#xff0c;类型为double&#xff0c;打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示&#xff0c;则打印“ERROR”。 示例1: 输入&#x…

深度学习修炼(二)全连接神经网络 | Softmax,交叉熵损失函数 优化AdaGrad,RMSProp等 对抗过拟合 全攻略

文章目录 1 多层感知机&#xff08;全连接神经网络&#xff09;1.1 表示1.2 基本概念1.3 必要组成—激活函数1.4 网络结构设计 2 损失函数2.1 SOFTMAX操作2.2 交叉熵损失函数 3 优化3.1 求导计算过于复杂&#xff1f;3.2 链式法则导致的问题&#xff1f;3.3 梯度下降算法的改进…

利用Python将dataframe格式的所有列的数据类型转换为分类数据类型

一、样例理解 import pandas as pd import numpy as np# 创建测试数据 feature_names [col1 , col2, col3, col4, col5, col6] values np.random.randint(20, size(10,6))dataset pd.DataFrame(data values, columns feature_names)print("转换前的数据为\n",d…

【刷题】2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题

蓝桥杯2023年第十四届省赛真题-平方差 - C语言网 (dotcpp.com) 初步想法&#xff0c;x y2 − z2&#xff08;yz)(y-z) 即xa*b&#xff0c;ayz&#xff0c;by-z 2yab 即ab是2的倍数就好了。 即x存在两个因数之和为偶数就能满足条件。 但时间是&#xff08;r-l&#xff09;*x&am…

监督学习和非监督学习, 半监督学习和增强学习

监督学习 给机器的训练数据拥有“标记”或者“答案”&#xff0c; 也就是又有x、又有y 监督的意思是说我们针对给机器的数据进行了正确答案的划分&#xff0c; 这个正确的答案的本身就被称为监督的信息 比如&#xff1a; 生活中很多学习的过程都是监督学习的过程&#xff0c;…

浏览器基本原理

1、浏览器内部组成 我们看到浏览器主要包括&#xff1a; 1个浏览器主进程&#xff1a; 主要负责界面显示&#xff0c;用户交互&#xff0c;子进程管理多个渲染进程&#xff1a;一般浏览器会为每个Tab标签窗口创建一个渲染进程&#xff0c;主要负责将html&#xff0c;css&#…

YOLOv5、YOLOv8改进:C3STR(Swin Transformer)

目录 1.介绍 2. YOLOv5、YOLOv8改进 2.1 common.py配置 2.2 yolo.py配置 2.3 yaml配置文件 1.介绍 视觉领域正在见证从 CNN 到 Transformers 的建模转变&#xff0c;纯 Transformer 架构在主要视频识别基准测试中达到了最高准确度。这些视频模型都建立在 Transformer 层之…

Grafana离线安装部署以及插件安装

Grafana是一个可视化面板&#xff08;Dashboard&#xff09;&#xff0c;有着非常漂亮的图表和布局展示&#xff0c;功能齐全的度量仪表盘和图形编辑器&#xff0c;支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。Grafana主要特性&#xff1a;灵活丰富的图形…

js逆向-某税务网站chinatax分析

目录 一、如图网站二、研究登陆页反爬参数1、datagram参数2、请求接口关系 三、研究详情页反爬参数1、urlyzm与ruuid与x-b3-spanid参数2、los28199参数3、lzkqow23819参数4、jmbw参数 四、最终结果 一、如图网站 二、研究登陆页反爬参数 1、datagram参数 很多接口使用到的dat…

1796_通过vmware打开VirtualBox虚拟机文件

全部学习汇总&#xff1a; GitHub - GreyZhang/toolbox: 常用的工具使用查询&#xff0c;非教程&#xff0c;仅作为自我参考&#xff01; 首先讲vdi格式转换成vmdk格式&#xff0c;以我自己的环境下的信息&#xff0c;处理如下&#xff1a; VBoxManage clonehd "LinuxMin…

【PowerShell】系统安装PowerShell的Core版本,最新版本为7.1

当前以下操作系统支持PowerShell 7.1 版本的安装,非Windows 系统支持的版本和要求有一定的限制。 Windows 8.1/10 (including ARM64)Windows Server 2012 R2, 2016, 2019, and Semi-Annual Channel (SAC)Ubuntu 16.04/18.04/20.04 (including ARM64)Ubuntu 19.10 (via Snap pac…