字母排序在mysql中

时间:2014-06-09 07:07:07

标签: mysql sorting alphabet

我正在使用测试数据“bank”来研究mac上的mysql。我对mysql中的字母排序有疑问。

我有一个示例代码select cust_id,cust_type_cd,city,state,fed_id from customer order by 2 asc;

第2栏中的回报显示“I”在“B”之前。

任何人都知道是什么原因?非常感谢。

4 个答案:

答案 0 :(得分:4)

我认为cust_type_cd是一个ENUM列,其中包含"我"在" B"之前订购在枚举定义中。

枚举按枚举定义的列表中值的序号位置排序,而不是按字母顺序排序。

要按字母顺序排序,请按字母顺序定义包含条目的枚举,否则强制将值转换为其字符串值:

... ORDER BY CONCAT(cust_type_cd) ASC

另见http://dev.mysql.com/doc/refman/5.6/en/enum.html#enum-sorting

请注意,使用ORDER BY子句中的函数会破坏使用索引进行排序的任何机会。它将被迫使用filesort。

答案 1 :(得分:1)

使用以下查询。在我的角色之前似乎有一些空间。

从客户订单中选择cust_id,trim(cust_type_cd)cust_type_cd,city,state,fed_id 2 asc

答案 2 :(得分:1)

严格不建议按列号使用顺序。当SELECT *未使用时,尤其不使用它。当有人改变表格,添加/删除一些列时,它也会产生问题。此链接可能会帮助您http://blog.sqlauthority.com/2010/12/27/sql-server-order-by-columnname-vs-order-by-columnnumber/

答案 3 :(得分:0)

您必须按表格中的列名命令 假设您要根据cust_id进行排序,则必须使用

select cust_id,cust_type_cd,city,state,fed_id from customer order by cust_id asc;