peewee 的 BooleanField 是翻譯為 tinyint(1) 還是 enum('true','false')?

ponponon發表於2023-04-18

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)被解釋為布林型別的行為。

相關文章