有一个字段’noticeBy’枚举(’email’,’mobile’,’all’,’auto’,’nothing’)NOT NULL默认’auto’。众所周知,按ENUM字段排序相对于其索引执行。但是,如何通过其值进行排序?
如“ 排序”中所述:
ENUM值根据其索引号排序,索引号取决于列规范中列出的枚举成员的顺序。例如,'b'在'a'for 之前排序ENUM('b', 'a')。空字符串排在非空字符串之前,NULL值排在所有其他枚举值之前。 为防止在使用列ORDER BY上的子句时出现意外结果ENUM,请使用以下技术之一: ENUM按字母顺序指定列表。 确保通过编码ORDER BY CAST(col AS CHAR)或将该列按词法而不是按索引号排序ORDER BY CONCAT(col)。
ENUM值根据其索引号排序,索引号取决于列规范中列出的枚举成员的顺序。例如,'b'在'a'for 之前排序ENUM('b', 'a')。空字符串排在非空字符串之前,NULL值排在所有其他枚举值之前。
ENUM
'b'
'a'
ENUM('b', 'a')
NULL
为防止在使用列ORDER BY上的子句时出现意外结果ENUM,请使用以下技术之一:
ORDER BY
ENUM按字母顺序指定列表。
确保通过编码ORDER BY CAST(col AS CHAR)或将该列按词法而不是按索引号排序ORDER BY CONCAT(col)。
ORDER BY CAST(col AS CHAR)
ORDER BY CONCAT(col)
因此,对于第二个项目符号,可以在将其强制转换为字符串后在该列上进行排序:
ORDER BY CAST(noticeBy AS CHAR)