mysql 中实现 bool 类型的字段,一般是使用 tinyint(1)
但是有些地方,会使用 enum(‘true’,’false’) 实现 bool
那么,peewee 的 BooleanField 类型翻译为 mysql 的 DDL 的时候,是翻译为 tinyint(1) 还是 enum(‘true’,’false’) 呢?
答案是 tinyint(1)
参考:
- MySQL boolean类型
- 为什么 mysql 的 where 之间无法使用 = 检索 bool 数值?
常见问题 QA
Q:对于 mysql,tinyint(1) 和 tinyint 有区别吗?应该没有吧
A:在MySQL中,tinyint和tinyint(1)在语义上是相同的,它们都是用于表示小整数值的数据类型。在实际使用中,这两种类型的表现是一样的,它们都占用一个字节的存储空间,并可以存储-128到127之间的整数值(如果是无符号类型,则可以存储0到255之间的整数值)。
然而,在MySQL 8.0之前的版本中,tinyint(1)的行为略有不同。在这些旧版本中,当使用tinyint(1)定义列时,MySQL将该列解释为一个布尔类型(BOOL或BOOLEAN),而不是整数类型。也就是说,tinyint(1)被视为只能存储0或1的类型。但是,在MySQL 8.0中,tinyint(1)的行为已经改变,它被视为一个普通的整数类型,与tinyint完全相同。
因此,在MySQL 8.0及以上版本中,tinyint(1)和tinyint是相同的,它们都表示一个占用一个字节存储空间的小整数值。但是,如果您正在使用MySQL 8.0之前的版本,则应该注意tinyint(1)与tinyint之间的差异,并了解tinyint(1)被解释为布尔类型的行为。