在mysql中枚举或Bool?

Sei*_*aft 7 mysql enums boolean

简单愚蠢的问题.什么是更好的?

Bool或Enum('y','n')?

Nie*_*sol 18

BOOLEAN是TINYINT(1)的别名,存储为一个字节的数据.
ENUM('y','n')也存储为1字节数据.

因此从存储大小的角度来看,两者都不是更好.
但是,您可以将9存储在BOOLEAN字段中,它将接受它.因此,如果您只想强制两个状态,请转到ENUM.

  • 正如我所提到的,您可以轻松地将9存储在BOOLEAN字段中.也就是说,9在相当多的语言中评估为TRUE,但在MySQL中没有(其中TRUE只是1的别名) (6认同)

ale*_*lex 6

TINYINT(1) - 它看起来像一个布尔值,所以把它做成一个.

永远不要在内部比较y布尔(0/1)可用时的事情.


jos*_*ott 5

这是将布尔值存储为枚举的问题:

SELECT count(*) FROM people WHERE is_active = true; #=>返回0是因为true!='true'

这具有误导性,因为:

SELECT count(*) FROM people WHERE is_active = 'true'; #=>返回10

如果您正在编写自己的所有SQL查询,那么您会知道不要将表达式传递到查询中,但是如果您使用的是ORM,则将遇到麻烦,因为ORM通常会转换表达式到查询的数据库可以理解的内容(对于SQLite,为't'/'f';对于MySQL等,为0/1)

简而言之,虽然在字节级别上一个可能不会比另一个快,但布尔值应存储为表达式,以便可以将它们与其他表达式进行比较。

至少,这就是我的看法。