`

(转)[MySQL]collate区分大小写

阅读更多

 转自:https://www.cnblogs.com/cyhzzu/p/6485050.html

 

Mysql 查询区分大小写

 

mysql查询默认是不区分大小写的 如:

1
2
select * from some_table where str=‘abc';
select * from some_table where str='ABC';

得到的结果是一样的,如果我们需要进行区分的话可以按照如下方法来做: 

第一种方法:
要让mysql查询区分大小写,可以:

1
2
select * from some_table where binary str='abc'
select * from some_table where binary str='ABC'

 

MySQL默认的order by是不区分大小写的。 如果我们希望使用区分大小写的order by, 该怎么办呢?

先看一个例子。

表结构:

create table test_collate(  `id` int NOT NULL AUTO_INCREMENT,  `text` varchar(40) NOT NULL,  PRIMARY KEY (`id`))ENGINE=MyISAM DEFAULT CHARSET=utf8;

插入数据:

insert into test_collate(`text`) values('aaa'),('bbb'),('AAA'),('BBB');

现在,如果我们按照text排序:

select * from test_collate order by text;

结果:

+----+------+| id | text |+----+------+| 1 | aaa || 3 | AAA || 2 | bbb || 4 | BBB |+----+------+

结果表明,大写的AAA和小写的aaa被认为是一样的, 都排在BBB和bbb前面。

为什么呢?

这里涉及到一个重要的概念,叫collate。 collate是一个与charset有关的概念, 它会影响到很多事情, 其中就包括排序的规则。

在《MySQL必知必会》中对collate有过详细的介绍, 我们就不在这里去介绍它了。

如何解决

解决方案有两个:

  1. 将test_collate表的collate改成case sensitive的

  2. 使用case sensitive的collate进行order by

这里,我们不希望改变表结构, 只是临时地order by一下, 因为使用方案2。

代码如下:

select * from test_collate order by text collate utf8_bin;

结果如下:

+----+------+| id | text |+----+------+| 3 | AAA || 4 | BBB || 1 | aaa || 2 | bbb |+----+------+
分享到:
评论

相关推荐

    使MySQL查询区分大小写.doc

    在MySQL中,查询默认情况下通常是不区分大小写的,但如果你想让你的查询对大小写敏感,有几种方法可以实现。以下是一些关键知识点和步骤来帮助你在MySQL中进行区分大小写的查询。 1. **设置列的Collation** - **...

    数据库区分大小写的设置

    通过对SQL Server和MySQL中区分大小写的设置进行深入了解,我们可以更好地根据实际需求调整数据库的行为。无论是创建表时指定字段属性、查询时动态控制还是更改现有表的设置,这些方法都为我们提供了灵活的手段来...

    MySql查询不区分大小写解决方案(两种)

    在MySQL数据库中,查询操作默认情况下是不区分大小写的,这意味着如果你在查询条件中使用了不同的大小写字母,比如"aaa"和"Aaa",它们会被视为相同,从而可能导致你期望的精确匹配失败。这对于一些特定场景,比如...

    详解MySQL查询时区分字符串中字母大小写的方法

    MySQL默认的行为是不区分字符串中的字母大小写,这可能会在某些场景下引起困扰,比如在需要严格区分大小写的数据库操作中。以下是对这一主题的详细解释。 首先,字符集是用于表示和存储文本数据的编码方式,如UTF-8...

    使MySQL查询区分大小写的实现方法

    在MySQL中,对于Column Collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,...

    解决MySQl查询不区分大小写的方法讲解

    在MySQL数据库中,查询操作默认情况下是不区分大小写的,这意味着如果你在查询时输入的字符串与数据库中的数据在大小写上不完全匹配,查询仍然可能返回结果。这在某些场景下可能会导致意料之外的问题,比如在用户...

    mysql 查询时没有对字符串区分大小写处理方法

    在MySQL数据库中,查询字符串时是否区分大小写是由字符集(character set)和校对规则(collation)共同决定的。当创建表或字段时,如果没有明确指定校对规则,MySQL通常会选择一个默认的,这可能导致在进行字符串...

    mysql中关键字的使用.txt

    例如,在进行字符串比较时,如果不使用`BINARY`,那么默认情况下会根据当前设置的字符集和排序规则来确定是否区分大小写。而在某些应用场景下,比如密码验证,我们通常希望比较时完全一致,这时就可以使用`BINARY`...

    MySQL中查询的有关英文字母大小写问题的分析

    ci代表Case Insensitive(不区分大小写),bin代表Binary(二进制,区分大小写)。 2. **字符集和校对规则的级别** - MySQL允许在四个级别上设置字符集和校对规则:服务器级、数据库级、表级和连接级。 - 服务器...

    WINDOWS下MYSQL8.0最详细的安装文档

    1. 修改my.ini配置文件:在[mysqld]部分添加`lower_case_table_names=0`,重启MySQL服务后,表名和数据库名将区分大小写。 2. 对于字段名,MySQL本身并不支持全局的大小写敏感设置,但可以在创建表时为每个字段指定...

    MySQL批量插入和唯一索引问题的解决方法

    1. **问题背景**:在MySQL中,创建的默认索引对字符列的比较通常是不区分大小写的,这可能导致预期的唯一性约束无法正常工作。 2. **问题分析**:例如,如果你创建了一个基于`varchar`列的唯一索引,即使两个字符串...

    mysql必知必会读书笔记.doc

    例如,某些校对规则区分大小写,而另一些则不区分。 #### 二、校对规则的理解与应用 **校对规则**(Collation)是一组规则,用于确定如何比较和排序字符串。在MySQL中,校对规则主要应用于排序、比较操作等方面,...

    mysql字符集设置

    - 适当选择排序规则,如`_bin`用于区分大小写,`_ci`用于不区分大小写。 了解和正确设置MySQL字符集是确保数据正确存储和检索的关键,对于处理全球化数据的应用尤其重要。通过合理配置,我们可以避免乱码问题,...

    带你5分钟读懂MySQL字符集设置

    例如,`_ci`(case insensitive)表示不区分大小写,`_cs`(case sensitive)表示区分大小写。在上述例子中,`big5_chinese_ci`和`dec8_swedish_ci`都是字符集对应的字符序。 3. **字符集和字符序的层级**:MySQL...

    Mysql相关使用总结

    其中,`COLLATE` 用于指定字符集的排序规则,例如 `utf8_general_ci` 表示不区分大小写。 - **删除数据库**: ```sql DROP DATABASE db_name; ``` - **选择数据库**: ```sql USE db_name; ``` - **显示...

    mysql字符集与比对方法collation

    MySQL中的比对方法通常基于字符集,如'utf8_general_ci','ci'代表'Case Insensitive',表示不区分大小写;而'utf8_bin'则区分大小写并更关注字节级别的比较。 在SQL语句中,我们可以通过创建数据库、表或者列时...

Global site tag (gtag.js) - Google Analytics