MySQL查询居然不区分大小写

news2024/11/14 14:15:43

MySQL查询居然不区分大小写

    • 事故现场
    • 真实原因
    • BINARY 关键字
    • 总结
      • MySQL 为什么要这样设计呢?
      • 解决方案
        • 修改排序规则
        • binary

!!!!!懵逼了, MySQL 查询居然不区分大小写,第一次听到这么陌生的概念 😵😵😵

事故现场

查询用户姓名是大写 Y 开头的用户。理所当然的写出 SQL
select * from t_user where real_name like 'Y%';

image.png

一看结果我懵逼了,这个时候我还不太相信 😵,我就又把大写 y 改成了小写。
select * from t_user where real_name like 'y%'
再一看结果我彻底懵了,(这个时候脑子已经闪现过无数过画面,之前好像完全没有注意到这个问题)

image.png

这个时候我还感觉是我自己的 SQL 写的有问题(没有想过 MySQL 天生就这样),我又把 like 换成了 =
select * from t_user where real_name = 'Yuen Wai Man'
看到结果的那一刻陷入了沉思

image.png

这个时候又想到一个问题,是不是配置有问题(当前环境 lower_case_table_names=2,但一想这个只跟表有关系没字段没半毛钱关系。),我还去其他环境的数据库中去验证了一下都是一样的结果。越发觉得奇怪了。

真实原因

表和字段的排序规则!!!!!

innodb 引擎下,字符集为:utf8mbf 下默认排序规则是 utf8mb4_0900_ai_ci,而 utf8 默认的排序规则是 utf8_general_ci。这里的 ci 代表不区分大小写(case-insensitive)。
区分大小写的排序规则 **utf8mbf:utf8mb4_bin** **utf8:utf8_bin**

image.png

破案了 👏👏👏,修改排序规则为 utf8mb4_bin。再查询。
🤢🤢 吐了,为什么还不行??

image.png

观察 varchar 类型的字段后发现。字段的排序规则没改过了。

image.png

这里修改后。一切正常了。(这里因为是建表的时候没有修改排序规则导致的,所以在建表后的字段需要单独修改

image.png image.png

BINARY 关键字

按字面量进行比较,是区分大小写的。将表的配置与字段的配置还原默认。
select * from t_user where BINARY real_name = 'Yuen Wai Man'
可以区分大小写了。

image.png

总结

MySQL 为什么要这样设计呢?

  1. 提高灵活性:用户在输入数据时可能不会注意大小写,不区分大小写的查询可以更好地匹配用户的输入,提供更灵活的搜索体验。
  2. 增强用户体验:对于用户来说,不区分大小写的查询可以减少输入错误带来的搜索问题,用户不需要记住确切的大小写格式。
  3. 避免重复:不区分大小写的查询可以避免因大小写差异而产生的数据重复问题,确保数据库中的数据唯一性。

解决方案

修改排序规则

优点:

  • 统一性:可以在数据库级别、表级别或列级别设置默认排序规则,从而确保数据的一致性。
  • 适用性:适合处理特定语言或文化环境中的文本数据,可以按照语言习惯进行排序和比较。

缺点:

  • 性能影响:区分大小写,尤其是在进行全文搜索或大量数据比较时。
  • 复杂性:对于不了解的程序员,上手可能是懵的,为什么在其他环境下可以查询,当前表不行呢?
  • 数据迁移:如果排序规则不一样迁移数据的时候回导致数据丢失、
binary

优点:

  • 简单性:使用 BINARY 关键字可以避免更改现有的排序规则,简化了操作。(其他程序员一看就可以是用了区分大小写)
  • 性能:在某些情况下,使用 BINARY 可能比修改排序规则更高效,因为它避免了排序规则的复杂性。

缺点:

  • 限制性:只能在查询中通过 SQL 使用,没有办法为数据库做统一修改
  • 可读性: 在 SQL 较为复杂的情况下,额外的关键字会给阅读带来不小的难度

选择哪种方式取决于具体的应用需求、性能考虑以及开发和维护的便利性。在实际应用中,可能需要根据具体情况灵活选择或结合使用这两种方法。

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

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

相关文章

实验9 根据材料编程《汇编语言》- 王爽

1. 需求 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 welcome to masm! 2. 分析 (1)材料中提到,一个在屏幕上显示的字符,具有前景(字符色)和背景(底色)…

[000-01-030].第7节:Zookeeper工作原理

1.Zookeeper工作原理: 1.1.Zookeeper的工作机制 1.Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架;2.Zookeeper负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的…

来了,秋天的第一个POC

立秋就这么水灵灵地过了 又到了“秋天的第一杯奶茶”刷屏的时刻 而我们要追求的是“秋天的第一个POC” 做好变强的准备了吗 Yak POC编写,这一篇就够了 文章中指代的POC仅指使用 Yaklang 编程语言编写的POC 在此篇文章中就详细描述 Yaklang 语法的学习了&#x…

【昱合昇天窗】消防排烟天窗设计使用需注意问题

消防排烟天窗在设计和使用过程中,需要避免出现以下三个问题,以免影响其排烟效果和安全性。1、只关注价格 很多人在选择消防排烟天窗时,只关心天窗的价格,不重视天窗型号、配置选择是否满足厂房需求。这样做的坏处在于安装的天窗可…

还在画恐怖片?局部重绘,艺术再创造 —— Stable diffusion inPainting功能详解与实战指南

前言 在AI绘画的世界里,我们常常面临这样的困境:一幅作品,除了手部姿势、面部表情其他都很完美;这时候,如果要重新生成整幅画,不仅效率低下,而且可能会破坏原本满意的部分。幸好,St…

JAVA毕业设计|(免费)ssm视康眼镜网店销售系统的包含文档代码讲解

收藏点赞不迷路 关注作者有好处 编号:ssm538 ssm视康眼镜网店销售系统的 开发语言:Java 数据库:MySQL 技术:SpringSpringMVCMyBatisVue 工具:IDEA/Ecilpse、Navicat、Maven 文末获取源码 1.系统展示 2.万字文档展示 …

为什么MySql使用B+树

mysql索引为什么选择B树? 在回答这个问题之前,得先了解一个概念,页的概念。页是InnoDB中数据管理的最小单位。当我们查询数据时,其是以页为单位,将磁盘中的数据加载到缓冲池中的。同理,更新数据也是以页为…

数据库实验一 创建数据库

一.实验目的 1.学会数据表的创建; 2.加深对表间关系的理解; 3.理解数据库中数据的简单查询方法和应用。 二. 实验内容 1.题目要求 给定一个实际问题,实际应用问题的模式设计中至少要包括3个基本表。应用问题是供应商给工程供…

被嫌弃的35岁程序员,竟找到了职业的新出路:PMP项目管理

35岁,本应是事业发展的高峰期。更多听到的却是35岁职场天花板,特别是IT从业者,35岁就好像是一道迈不过的坎:多年的工作经验,在35岁的生理年龄面前,一文不值。 IT从业者若想安然度过“35岁危机”&#xff0…

【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出

【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出 文章目录 【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出1.简介2.验证用例3.软件代码4.链接脚本5.编译脚本6.仿真结果6.1 复位结束6.2 运行成功6.3 终端打印 7.总结 1.简介 本文将详细阐述如何利用 printf 来打印字符串…

做自媒体博主如何使用外网视频素材!

想成为视频博主却不知道外网视频怎么下载?看这里! 在这个信息爆炸的时代,做一名视频博主无疑是展现自我、分享创意的绝佳方式。但当我们想要获取更多灵感,从外网的精彩视频中学习时,却常常被下载的问题难住。 其实&…

【启明智显技术分享】工业级HMI芯片Model3A开发过程中问题记录笔记

一、Model3A芯片介绍 Model3A是启明智显针对工业、行业以及车载产品市场推出的一款高性能、低成本的工业级HMI(Human-Machine Interface,人机界面)芯片。该芯片主要应用于工业自动化、智能终端HMI、车载仪表盘、两轮车彩屏仪表、串口屏、智能…

无人机航拍与ArcGIS融合实战:从地表观测到空间数据可视化的全方位指南!无人机图像拼接数据处理与分析、可视化与制图

目录 第一章 无人机航拍基本流程、航线规划与飞行实践 第二章 无人机图像拼接软件的学习与操作实践 第三章 无人机图像拼接典型案例详解 第四章 无人机图像拼接数据在GIS中的处理与分析 第五章 无人机图像拼接数据在GIS中的可视化与制图 第六章 综合案例:无人机航拍植被动…

Docker 部署 XXL-JOB

Docker 部署 XXL-JOB 目录 引言环境准备创建 MySQL 用户并授予权限使用 Docker 部署 XXL-JOB配置 XXL-JOB验证部署总结 1. 引言 XXL-JOB 是一个开源的分布式任务调度平台,旨在简化定时任务的管理和调度操作。其强大的功能和灵活性,使其在互联网公司和…

SSH 隧道方式连接 MySQL 服务器

SSH 隧道方式连接 MySQL 服务器 1 安装 MySQL 客户端工具1.1 Navicat1.2 MySQL Workbench1.2.1 查看本机系统类型1.2.2 安装 Visual C 20191.2.3 安装 MySQL Workbench 2 SSH 隧道方式连接数据库2.1 Navicat2.1.1 SSH 连服务器2.1.2 本地连数据库 2.2 MySQL Workbench 本文介绍…

云动态摘要 2024-08-12

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 全球加速 GA - 新增“巴西(圣保罗)”、“沙特(利雅得)”接入点 华为云 2024-08-12 全球加速服务新增开通“巴西(圣保罗)”、“沙特&a…

BI奇点来临,AIChat打通数据消费“最后一公里”

“把数据用起来和用好”,这是企业数智化转型升级中的一大核心命题。但现实情况中,大部分企业在业务应用和数据消费中始终难以做到得心应手。 直到大模型的崛起,生成式AI技术展现出强大能力,为彻底打通数据消费“最后一公里”带来…

NUC 14 Pro+:灵感加速器,创意无界之旅

喜欢创作的友友们皆懂,灵感如流星,可遇不可求,当它闪烁在你的脑海中,需要即刻行动,将其化为现实。而NUC 14 Pro就将在这时,给予你独特的支持。 灵感火花,瞬间点燃 触摸NUC 14 Pro的轻薄机身&am…

新手常见错误:java.lang.NumberFormatException: For input string: “xxxx“

目录 ​编辑 故事背景 文言一心解答: 思考: 文心一言总结: 报错总结: 解决方案: 结语: 故事背景 写代码的时候遇到的报错 文言一心解答: 这个错误 java.lang.NumberFormatException:…

【后端记录】修复MySql的错误修改的数据记录【binlog修复】

前言 今天入门后端的时候,不小心改了非预期的数据,因为还没学到事务,所以恢复数据还比较麻烦,站在巨人的肩膀上还是解决了,原文连接在下面 https://blog.csdn.net/qq_42874315/article/details/140480570 解决办法 原…