有一个字段'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)

Mysql相关问答推荐

在mySQL中使用子查询和WHERE子句的JOIN

如何在Sequelize中创建限制查询?

将值代入子查询

约会时的意外行为

使用字符串文字与使用日期文字时的SQL行为

如何在 MySQL 中对同一个表的多个列进行 INNER JOIN

使用Workbench时如何添加mysqldump配置标志

如何更新一个巨大的表的 50k 行?

看不懂mysql自左连接查询

MYSQL "Like" 正向和反向词序查询

检索按键列值分组的最新日期 (MySql)

Mysql JSON_REMOVE 数组键和值 (MariaDB)

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

MySQL过滤食谱上的多对多 - 成分表

MYSQL 或 Laravel Eloquent 如何从这个订单中统计细节

在另一个 where 语句(子查询?)中使用一个 sql 查询的结果

使用 Docker 我收到错误:SQLSTATE[HY000] [2002] 没有这样的文件或目录

什么是全文索引,我应该什么时候使用它?

MySQL导入数据库但忽略特定表

AWS RDS 实例升级停机时间