有一个字段'noticeBy'enum('email'、'mobile'、'all'、'auto'、'nothing')不是空的默认值'auto'.众所周知,按枚举排序字段相对于其索引执行.然而,它是如何通过价值观来建立秩序的呢?
有一个字段'noticeBy'enum('email'、'mobile'、'all'、'auto'、'nothing')不是空的默认值'auto'.众所周知,按枚举排序字段相对于其索引执行.然而,它是如何通过价值观来建立秩序的呢?
如第Sorting条所述:
ENUM
个值根据其索引编号进行排序,索引编号取决于列规范中枚举成员的列出顺序.例如,'b'
在'a'
之前对ENUM('b', 'a')
进行排序.空字符串排序在非空字符串之前,NULL
个值排序在所有其他枚举值之前.要防止在
ENUM
列上使用ORDER BY
子句时出现意外结果,请使用以下技巧之一:
按字母顺序指定
ENUM
个列表.确保列是按词汇排序的,而不是按索引编号编码
ORDER BY CAST(col AS CHAR)
或ORDER BY CONCAT(col)
.
因此,根据第二个项目符号,可以在列的长度为cast到一个字符串后对其进行排序:
ORDER BY CAST(noticeBy AS CHAR)