zoukankan      html  css  js  c++  java
  • MySQL的order by时区分大小写

    Mysql 查询区分大小写

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

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

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

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

    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 |+----+------+
  • 相关阅读:
    高通Android分区表详解
    LC 871. Minimum Number of Refueling Stops 【lock, hard】
    LC 265. Paint House II
    Horovod 通信策略
    LC 351. Android Unlock Patterns
    LC 957. Prison Cells After N Days
    解析java泛型(二)
    解析java泛型(一)
    全面理解java异常机制
    java基础之继承(二)
  • 原文地址:https://www.cnblogs.com/cyhzzu/p/6485050.html
Copyright © 2011-2022 走看看