当前位置: 首页 > backend >正文

MySQL查询不区分大小写问题剖析

概述

  • 在MySQL中,查询不区分大小写的问题通常与字符集的校对规则(Collation)有关。以下是详细解释和解决方案
  • 资料已经分类整理好:https://pan.quark.cn/s/f52968c518d3

一、原因分析

1. 默认校对规则

MySQL的默认校对规则(如 utf8_general_ciutf8mb4_0900_ai_ci)中的 ci 表示 Case Insensitive(不区分大小写)。此时,SELECT 查询会忽略字符串的大小写差异。

2. 存储引擎影响

如果表使用 MyISAM 引擎,文件名可能区分大小写(取决于操作系统),但数据内容的比较仍由校对规则决定。


二、解决方案

方法1:修改列的校对规则

通过指定 Case Sensitive(区分大小写)的校对规则(如 utf8_binutf8mb4_bin):

-- 查看当前校对规则
SHOW CREATE TABLE your_table;-- 修改列的校对规则
ALTER TABLE your_table 
MODIFY COLUMN your_column VARCHAR(255) 
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

方法2:查询时强制区分大小写

在查询中使用 BINARY 关键字或 COLLATE 子句:

-- 使用 BINARY
SELECT * FROM your_table 
WHERE BINARY your_column = 'YourValue';-- 使用 COLLATE
SELECT * FROM your_table 
WHERE your_column COLLATE utf8mb4_bin = 'YourValue';

方法3:修改表或数据库的默认校对规则

创建表或数据库时直接指定区分大小写的规则:

-- 创建表时指定
CREATE TABLE your_table (your_column VARCHAR(255) COLLATE utf8mb4_bin
);-- 创建数据库时指定
CREATE DATABASE your_db 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_bin;

方法4:配置文件全局设置

在 MySQL 配置文件(如 my.cnfmy.ini)中设置默认校对规则:

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin

三、其他注意事项

1. LIKE 查询

默认情况下,LIKE 也受校对规则影响。若需区分大小写,同样需使用 BINARY

SELECT * FROM your_table 
WHERE BINARY your_column LIKE '%Value%';

2. 索引影响

修改校对规则可能导致索引重建,但查询时使用 BINARYCOLLATE 可能导致索引失效,需权衡性能。

3. 操作系统兼容性

Linux 系统默认区分文件名大小写,而 Windows/Mac 不区分,需注意表名大小写问题(通过配置 lower_case_table_names 解决)。


四、验证校对规则

-- 查看数据库默认校对规则
SHOW VARIABLES LIKE 'collation_database';-- 查看表的校对规则
SHOW TABLE STATUS LIKE 'your_table';-- 查看列的校对规则
SELECT COLLATION_NAME 
FROM information_schema.columns 
WHERE TABLE_NAME = 'your_table' 
AND COLUMN_NAME = 'your_column';

通过以上方法,可以灵活控制 MySQL 查询是否区分大小写。根据实际需求选择合适方案!

http://www.xdnf.cn/news/6630.html

相关文章:

  • 58. 区间和
  • Multimodal models —— CLIP,LLava,QWen
  • java输入输出类
  • MySQL MCP 使用案例
  • ubuntu 更新华为源
  • windows下authas调试tomcat
  • 突发,苹果发布下一代 CarPlay Ultra
  • WEB安全--Java安全--shiro721反序列化漏洞
  • 快速选择算法:优化大数据中的 Top-K 问题
  • 本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能
  • ssti刷刷刷
  • 使用 LSTM/GRU 预测设备异常的模型
  • 【HTML5学习笔记2】html标签(下)
  • Java视频流RTMP/RTSP协议解析与实战代码
  • PCL 计算一条射线与二次曲面的交点
  • 西安前端面试
  • YOLO+UI(C#)开发
  • 基于React的高德地图api教程006:两点之间距离测量
  • 大规模CFD仿真计算中,SIMPLE或者PISO算法中加速压力场方程迭代求解
  • SZU 编译原理
  • BASE理论
  • 四、xlib区域
  • go 集成base64Captcha 支持多种验证码
  • 【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。
  • 从银行排队到零钱支付:用“钱包经济学”重构Java缓存认知
  • LLaMA-Factory微调大模型Qwen2.5
  • 【设计模式】- 行为型模式1
  • 利用 Amazon Bedrock Data Automation(BDA)对视频数据进行自动化处理与检索
  • 2025年PMP 学习十六 第11章 项目风险管理 (总章)
  • IDEA中springboot项目中连接docker