一尘不染

在MySQL中按“ ENUM字段”排序

mysql

有一个字段’noticeBy’枚举(’email’,’mobile’,’all’,’auto’,’nothing’)NOT
NULL默认’auto’。众所周知,按ENUM字段排序相对于其索引执行。但是,如何通过其值进行排序?


阅读 1039

收藏
2020-05-17

共1个答案

一尘不染

如“ 排序”中所述

ENUM值根据其索引号排序,索引号取决于列规范中列出的枚举成员的顺序。例如,'b''a'for 之前排序ENUM('b', 'a')。空字符串排在非空字符串之前,NULL值排在所有其他枚举值之前。

为防止在使用列ORDER BY上的子句时出现意外结果ENUM,请使用以下技术之一:

  • ENUM按字母顺序指定列表。

  • 确保通过编码ORDER BY CAST(col AS CHAR)或将该列按词法而不是按索引号排序ORDER BY CONCAT(col)

因此,对于第二个项目符号,可以在将其强制转换为字符串后在该列上进行排序:

ORDER BY CAST(noticeBy AS CHAR)
2020-05-17