MySQL的order by時區分大小寫

2023-01-20 07:05:49 字數 1518 閱讀 4977

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有過詳細的介紹, 我們就不在這裡去介紹它了。

解決方案有兩個:

將test_collate表的collate改成case sensitive的

使用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的時區 MySQL時區支援

時區支援 使用的時區由 time zone 全域性變數和 session 變數決定。time zone 的預設值是 system,system 對應的實際時區在 tidb 叢集 bootstrap 初始化時設定。具體邏輯如下 優先使用 tz 環境變數 如果失敗,則從 etc localtime 的實...

mysql 關於order by的優化

from wwj mingxi m left join wwj user u on u.id m.uid order by m.id desc limit 0,20 花費時間4s 可以看出主要原因是使用了臨時表,檔案排序。也就是說order by m.id沒有走索引。為什麼呢?這裡就要說了mysql...

MySQL中的ORDER BY排序實現方式

總的來說,在 mysql 中的order by有兩種排序實現方式,一種是利用有序索引獲取有序資料,另一種則是通過相應的排序演算法,將取得的資料在記憶體中進行排序。下面將通過例項分析兩種排序實現方式及實現 假設有 table a 和 b 兩個表結構分別如下 sky localhost example ...