You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在MySQL中执行不区分大小写的ORDER BY排序?

MySQL实现不区分大小写的ORDER BY排序

这个问题我之前也碰到过,本质是MySQL字段的字符排序规则在搞鬼!默认如果你的字段用的是utf8_bin这类区分大小写的规则,排序时会严格按照字符的二进制值来排——大写字母的二进制值比小写的小,所以就会出现A、C、D、b、e这种大写在前的结果。下面给你几种实用的解决办法:

1. 临时指定排序规则(快速解决)

如果只是单次查询需要不区分大小写排序,直接在ORDER BY后面加上COLLATE指定不区分大小写的规则就行,比如utf8_general_ci或者utf8_unicode_ci(后者对多语言支持更精准,性能略逊于前者):

SELECT your_column FROM your_table ORDER BY your_column COLLATE utf8_general_ci;

举个具体例子,假设你的表叫letters,字段是char,那SQL就是:

SELECT char FROM letters ORDER BY char COLLATE utf8_general_ci;

执行后就能得到你想要的A、b、C、D、e排序结果。

2. 永久修改字段排序规则(一劳永逸)

如果这个字段经常需要不区分大小写排序,不如直接修改表结构,把字段的排序规则改成不区分大小写的,以后默认排序就不用额外指定了:

ALTER TABLE your_table MODIFY COLUMN your_column VARCHAR(你的字段长度) CHARACTER SET utf8 COLLATE utf8_general_ci;

比如你的字段是长度为1的字符,表名是letters,字段名是char,那就是:

ALTER TABLE letters MODIFY COLUMN char VARCHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci;

3. 通过函数转换后排序(备选方案)

还有一种思路是把字段统一转成小写或大写再排序,比如用LOWER()UPPER()函数:

SELECT your_column FROM your_table ORDER BY LOWER(your_column);

不过要注意:这种方法会让字段上的索引失效(如果有的话),数据量比较大的时候,查询性能会受影响,所以优先推荐前两种方法。


内容的提问来源于stack exchange,提问作者Manikandan C

火山引擎 最新活动