mysql 中实现 bool 类型的字段,个别是应用 tinyint(1)
然而有些中央,会应用 enum(‘true’,’false’) 实现 bool
那么,peewee 的 BooleanField 类型翻译为 mysql 的 DDL 的时候,是翻译为 tinyint(1) 还是 enum(‘true’,’false’) 呢?
答案是 tinyint(1)
常见问题 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)被解释为布尔类型的行为。
发表回复