Mysql 将1作为数字保存到枚举(';1';,';0';)字段中,将值设置为0

Mysql 将1作为数字保存到枚举(';1';,';0';)字段中,将值设置为0,mysql,enums,Mysql,Enums,在将1作为整数保存到ENUM('1','0')中时,请注意一些奇怪的事情。该值被存储为0 UPDATE table SET `somefield` = 1 WHERE `id` = 1; SELECT id, `somefield` WHERE id = 1; id, somefield 1, 0 有什么办法使它起作用吗?我宁愿不修改数据库 此外,如果您为枚举的更新值提供一个整数而不是字符串,则会将其解释为枚举值的索引,而不是值,您将非常感谢任何有关为什么会发生这种情况以及字段未转换的信息

在将
1
作为整数保存到
ENUM('1','0')
中时,请注意一些奇怪的事情。该值被存储为0

UPDATE table SET `somefield` = 1 WHERE `id` = 1;

SELECT id, `somefield` WHERE id = 1;

id, somefield
1, 0
有什么办法使它起作用吗?我宁愿不修改数据库


此外,如果您为枚举的更新值提供一个整数而不是字符串,则会将其解释为枚举值的索引,而不是值,您将非常感谢任何有关为什么会发生这种情况以及字段未转换的信息

与所有SQL一样,枚举使用基于1的索引,因此对于枚举,索引1是
'1'
,索引2是
'0'
。其他任何东西都是错误的

这意味着您的update语句应该产生一个
'1'
,而不是一个零,因此您的表不是如您所说的那样定义的,或者您的update语句不是如您所说的那样定义的

看看这个证明了这一点

UPDATE table SET `somefield` = '1' WHERE `id` = 1;
需要将该值指定为字符串。

ENUM('1','0')
是一个特别糟糕的主意,除非您试图赢得代码混淆竞赛('0'+1=3,具体取决于评估方式)。在
ENUM
的字典中,任何与字符串和数字之间进行干净强制转换的值实际上都会导致意外行为<在这种情况下,code>TINYINT是更合适的数据类型。