在MySQL數據庫中最適合使用哪種列類型的布爾值?我使用boolean
,但我的同事使用tinyint(1)
。布爾值與tinyint(1)在MySQL中的布爾值
回答
這些數據類型是同義詞。
是的 - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html – 2010-09-20 13:27:05
我不會說數據_types_是同義詞 - tinyint(1)是相同的布爾,但tinyint和bool不一樣。小點,但你的回答絆倒了我第一次閱讀它 – 2017-10-06 19:57:52
這並沒有回答這個問題。雖然tinyint(1)在功能上與bool完全相同,但操作系統詢問最佳使用方法。 @dj_segfault的答案做了一個適當的工作,解釋爲什麼在存儲布爾值時,bool應該優於tinyint(1)。 – 2017-11-21 02:05:04
boolean
在MySQL中不是一個獨特的數據類型;它只是tinyint
的同義詞。 See this page in the MySQL manual。
就我個人而言,我會建議使用tinyint作爲首選項,因爲布爾值不會做你認爲它從名稱中做的事情,所以它會導致潛在的誤導性代碼。但是在實踐層面上,這並不重要 - 它們都做同樣的事情,所以你不會因爲使用任何東西而獲得或失去任何東西。
使用枚舉其容易和最快
我不會推薦枚舉或TINYINT(1),比特(1)只需要1個用於存儲布爾值而TINYINT(1)需要8位位。
裁判
我們不能使用枚舉,因爲我們的數據庫也需要支持sqlite – tom 2010-09-20 13:32:53
如果您使用的是InnoDB,那麼最終的結果就是使用tinyint的空間。來自[高性能MySQL](http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/)(percona球員)「InnoDB存儲每個[位]列作爲最小的整數類型足以容納這些位,因此您不需要保存任何存儲空間。「唯一的好處就是如果你將多個布爾值存儲在BIT(morethan1)列中。因此,如果只有一個布爾字段,那麼使用tinyint與InnoDB中的位相同,因爲tinyint通常更易於使用,所以更好。 – billmalarky 2013-04-16 18:59:44
,我要在這裏採取不同的方法和建議,爲您的夥伴開發人員理解你的代碼,因爲它是編譯器/數據庫,它只是作爲重要的。使用布爾值可以做與使用tinyint相同的功能,但它具有語義上表達您的意圖的優點,這是值得的。
如果你使用tinyint,你應該看到的唯一值是0和1並不明顯。布爾值總是爲真或爲假。
我的經驗用小巧玲瓏連接到MySQL的當是這件事一樣。我換了一個非可空位(1)爲可空TINYINT(1)通過使用下面的腳本:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
然後小巧玲瓏開始拋出異常。我試圖看看腳本前後的區別。並注意到位(1)已變成tinyint(1)。
我然後跑:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
這解決了這個問題。
雖然這是事實,bool
和tinyint(1)
是功能相同,bool
應該是更好的選擇,因爲它承載着你想要做什麼語義。此外,許多ORM會將bool
轉換爲您的編程語言的本機布爾類型。
- 1. 布爾另存爲tinyint(1)在mysql中
- 2. MySQL錯誤店布爾值到TINYINT
- 3. MySQL按照布爾值排序tinyint
- 4. TINYINT被示出爲在c#布爾值
- 5. 與sqlite的布爾的布爾值
- 6. 使用MVC處理tinyInt布爾值
- 7. MySQL布爾值 - 翻轉值?
- 8. 布爾(布爾)值切換
- 9. 爲什麼MySQL將布爾值解釋爲TINYINT(1)而不是BIT(1)?
- 10. 更新MySQL的布爾(TINYINT)從PHP
- 11. 用0和1(布爾值)的值
- 12. MySQL的合併記錄與布爾值
- 13. MYSQL布爾值TRUE或FALSE
- 14. Hibernate的JPA,MySQL和TINYINT(1)布爾代替位或字符
- 15. Java 1.7 CachedRowSet.populate()將MySQL TINYINT(1)轉換爲布爾值。這可以禁用嗎?
- 16. Rails將mysql tinyint(1)視爲布爾值 - 但我希望它是一個數字
- 17. JSON值1或0 - int或布爾值
- 18. 優化MySQL查詢與布爾值
- 19. XSLT布爾值
- 20. 布爾值
- 21. 在PHP和MySQL中處理'布爾'值
- 22. 在實體框架中將tinyint映射到布爾值
- 23. 在查詢中調用tinyint爲0(用作布爾值)
- 24. 閏年與布爾值
- 25. sql JOIN與布爾值WHERE
- 26. 3路布爾值與Java
- 27. 問題與setVisible(布爾值)
- 28. 具有默認值的可爲空布爾值或布爾值?
- 29. 流程布爾型,布爾值和布爾型
- 30. 從NodeJS中的MYSQL返回布爾值
似乎MySQL透明地將'boolean'視爲'tinyint(1)'。所以你可以使用'boolean','true'和'false',MySQL將它們視爲'tinyint(1)','1'和'0'。 – ADTC 2016-11-05 07:26:56
另一個案例是字符1與Y&N,這應該是由一些人更快。 – Zon 2017-06-23 05:14:43