这篇非常有用的文章解释了有关MySQL 枚举行为的一些奇怪之处:http : //melp.nl/2009/05/mysql-enums-and-booleans/
没有讨论为什么存在这种行为。此外,在谷歌搜索这个主题时,我发现只有“博主”和其他盲人引导盲人的相互矛盾的信息和猜测。
有人可以描述为什么 MySQL 枚举会遭受帖子中概述的行为的影响。这是博文中出现的枚举异常的一个示例,但还有更多:
mysql> insert into t values('1'),('0');
mysql> select b,b=1,b=0 from t;
+---+-----+-----+
| b | b=1 | b=0 |
+---+-----+-----+
| 1 | 0 | 0 |
| 0 | 1 | 0 |
+---+-----+-----+
2 rows in set (0.00 sec)
SELECT
您示例中的 the 应该与其INSERT
使用引号的方式一致。以下作品:这是证据。
MySQL 的枚举文档解释说,枚举是字符串的索引——每个条目都有一个数字索引和一个字符串值。您问题中的查询使用的是数字索引,而我提供的查询使用的是您插入的字符串。
SELECT
文档中还指出,第一个值的索引始终为 1,而索引 0 始终解析为空字符串 ('')。因此,枚举
('0','1','3','Banana','2')
将如下所示:在上面的示例中 - 以及您的原始示例 -
select b,b=1,b=0 from t;
将查找索引 0 和 1,它们分别解析为值''
和0
。在处理枚举数据时,你几乎永远不需要使用索引——确保你使用字符串值,并且每次都在它们周围加上引号。
作为一般规则,不要使用
enum
类型来存储数字。混淆的风险非常高,如果你真的想限制值,还有其他合适的工具,比如带外键的查找表。