Nie*_*sol 18
BOOLEAN是TINYINT(1)的别名,存储为一个字节的数据.
ENUM('y','n')也存储为1字节数据.
因此从存储大小的角度来看,两者都不是更好.
但是,您可以将9存储在BOOLEAN字段中,它将接受它.因此,如果您只想强制两个状态,请转到ENUM.
这是将布尔值存储为枚举的问题:
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)
简而言之,虽然在字节级别上一个可能不会比另一个快,但布尔值应存储为表达式,以便可以将它们与其他表达式进行比较。
至少,这就是我的看法。
| 归档时间: |
|
| 查看次数: |
9584 次 |
| 最近记录: |