首页 > 数据库 >MySQL的where条件字符串区分大小写的问题

MySQL的where条件字符串区分大小写的问题

时间:2024-10-29 15:02:45浏览次数:3  
标签:utf8mb4 区分 MySQL 大小写 规则 排序 where

https://blog.csdn.net/qq_45783259/article/details/132231226

MySQL的where条件字符串区分大小写的问题
在MySQL的默认情况下字符集采用的是utf8mb4,排序规则是utf8mb4_general_ci,这种情况下where条件遇到字符串是不区分大小写的。

比如以下两条SQL语句查询出来的结果都是一样的,即对大小写不敏感:

 


通过查询资料发现是所选用的collate(校对)导致的问题 ,也即选用的排序规则问题。 collate规则:

*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
*_cs: case sensitive collation,区分大小写
*_ci: case insensitive collation,不区分大小写

在MySQL中排序规则(collation)决定了如何对字符串进行比较和排序

解决方法
方法一:使用BINARY关键字
在MySQL中,BINARY关键字,用于声明一个列为二进制字符串类型。它可以用于创建表时指定列的数据类型,或者查询时限制列的比较方式。它可以确保在比较时将列视为二进制字符串,而不是根据字符集进行比较。

因此可以在建表时将列设置为BINARY

CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) BINARY DEFAULT NULL,

)
1
2
3
4
5
或更新该字段为BINARY:

alter table sys_user modify username varchar(50) binary;
1
也可以不改变原有表结构,而是改SQL,在查询字段前加上 binary 关键字

select * from sys_user where BINARY username = 'Admin'
1
方法二:修改字段的的排序规则
utf8mb4字符集的默认排序规则是utf8mb4_general_ci,该排序规则是不区分大小写的,因此可以将字段的排序规则更换为区分大小写的排序规则utf8mb4_bin,如:

ALTER TABLE sys_user MODIFY username VARCHAR(50) COLLATE utf8mb4_bin;
1
MySQL中utf8mb4字符集的常见排序规则介绍
utf8mb4_general_ci:这是MySQL默认的排序规则。它是不区分大小写的(例如,"a"和"A"被认为是相等的), 没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。
utf8mb4_bin:这是一种二进制排序规则,它会按照字符的二进制编码进行排序。它是区分大小写的。例如,"a"和"A"被认为是不相等的。
utf8mb4_unicode_ci:这是一种基于Unicode字符集的排序规则。它是不区分大小写的。它支持多种语言和字符集,可以正确地处理各种语言的排序需求。
utf8mb4_unicode_520_ci:这是基于Unicode 5.2.0版本的排序规则。它是不区分大小写的。它是utf8mb4_unicode_ci的一个子集,提供了更快的排序性能。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_45783259/article/details/132231226

标签:utf8mb4,区分,MySQL,大小写,规则,排序,where
From: https://www.cnblogs.com/rxbook/p/18513262

相关文章

  • MYSQL 锁后记(慢、死锁、强制释放) - 《小猫钓鱼-猫王争霸》
    在美丽的森林中,小猫们的钓鱼大赛依旧如火如荼地进行着,而“猫王争霸”的诱惑让每只小猫都充满了斗志。随着时间的推移,围绕着MySQL鱼表的各种问题也逐渐浮现。一、慢查询之困最近,小猫们发现存鱼和查看鱼表的操作有时候会变得异常缓慢。花猫焦急地说:“这可怎么办呀?存个鱼都......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现七
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现八
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 【项目实战】分布式日志搜索系统之数据同步方案(Logstash-input-jdbc、go-mysql-elast
    在构建分布式日志搜索系统时,数据同步是一个核心环节。以下是针对您提出的五种数据同步方案的详细分析:一、Logstash-input-jdbcLogstash是ElasticStack的一部分,用于从各种来源收集数据,并将其发送到Elasticsearch。Logstash-input-jdbc插件允许Logstash从关系型数据库(如My......
  • linux直接下载安装mysql8
    linux直接下载安装mysql8下载并解压下载地址:https://dev.mysql.com/get/Downloads/mkdir/opt/mysql8wgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.40-linux-glibc2.28-x86_64.tar.xztar-xJvfmysql-8.0.40-linux-glibc2.28-x86_64.tar.xzmvmysql-8.0.4......
  • 深度解读RDS for MySQL 审计日志功能和原理
    本文分享自华为云社区《【华为云MySQL技术专栏】RDSforMySQL审计日志功能介绍》,作者:GaussDB数据库。1.背景在生产环境中,当数据库出现故障或问题时,运维人员需要快速定位出异常或者高危的SQL语句。这时,审计日志能够提供详细的记录,帮助追踪每个数据库操作的执行者、执行时间以......
  • mysql递归SQL
    --表结构和数据DROPTABLEIFEXISTS`sys_region`;CREATETABLE`sys_region`(`id`int(50)NOTNULLAUTO_INCREMENTCOMMENT'地区主键编号',`name`varchar(50)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULLCOMMENT'地区名称',`sho......
  • 为什么MySQL单表不能超过2000万行? (1)
    ​最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。文中提到,他朋友在面试的过程中说,自己的工作就是把用户操作信息存到MySQL里,因为数据量超大(5000万条左右),需要每天定时生成3张表,然后将数据取模分别存到这三张表里。下面是两人的对......
  • 帝国cms一句MySQL语句实现多表数据之和
    SQL语句:SELECTCOUNT(AA.id)AStotalFROM(SELECTidFROMwww_moban5_cn_ecms_newsUNIONALLSELECTidFROMwww_moban5_cn_ecms_xiazaiUNIONALLSELECTidFROMwww_moban5_cn_ecms_photoUNIONALLSELECTidFROMwww_moban5_cn_ecms_download)......
  • PbootCMS 模板默认Sqlite数据库转Mysql数据库教程详解
    下载数据库文件:进入程序目录的data文件夹,找到.db后缀的数据库文件,下载到本地。下载相关工具:sqlitestudio:用于打开管理Sqlite数据库,导出Sql格式文件。SQLITE转MYSQL工具:用于转换数据库。导出Sqlite数据库:打开SqliteStudio,将.db文件拖入程序中。点击左上角导航......