[英]True/False vs 0/1 in MySQL
在 MySQL 數據庫中哪個更快? 布爾值,還是使用零和一來表示布爾值? 我的前端只有一個是/否單選按鈕。
某些啟用了“使用布爾值”選項的“前端”會將所有 TINYINT(1) 列視為布爾值,反之亦然。
這允許您在應用程序中使用 TRUE 和 FALSE 而不是 1 和 0。
這根本不會影響數據庫,因為它是在應用程序中實現的。
MySQL 中並沒有真正的BOOLEAN
類型。 BOOLEAN 只是 TINYINT(1) 的同義詞,TRUE 和 FALSE 是 1 和 0 的同義詞。
如果在編譯器中進行轉換,則應用程序的性能不會有任何差異。 否則,差異仍然不會很明顯。
您應該使用可以讓您更有效地編碼的任何方法,盡管不使用該功能可能會減少對特定“前端”供應商的依賴。
在 MySQL 中TRUE
和FALSE
是TINYINT(1)
同義詞。
因此,因此它基本上是相同的,但是 MySQL 正在轉換為 0/1 - 如果這對您來說更容易,請使用TINYINT
聚苯乙烯
性能可能非常小(如果有的話),如果您需要在 StackOverflow 上詢問,那么它不會影響您的數據庫:)
如果tinyint
不符合您的喜好, Bit
也是一種選擇。 幾個鏈接:
還有一個鏈接: http : //blog.mclaughlinsoftware.com/2010/02/26/mysql-boolean-data-type/
以及上面文章評論部分的引用:
- TINYINT(1) 不是 bit(1) 的同義詞。
- TINYINT(1) 可以存儲 -9 到 9。
- TINYINT(1) 無符號:0-9
- BIT(1): 0, 1.(位,字面意思)。
編輯:此編輯(和答案)僅與原始問題有很大關系...
Justin Rovang 和作者 maclochlainn 的其他引用(鏈接文章的評論部分)。
對不起,我似乎已經成為 substr-ism 的受害者:TINYINT(1): -128-+127 TINYINT(1) UNSIGNED: 0-255(Justin Rovang 25 August 11 at 4:32 pm)
確實如此,但該帖子是關於 PHPMyAdmin 列為布爾值的內容,在那里它只使用了 256 種可能性的整個范圍內的 0 或 1。 (maclochlainn 11 年 8 月 25 日晚上 11:35)
如果您對性能感興趣,那么值得使用 ENUM 類型。 由於更好的索引性能,它在大表上可能會更快。
使用方式(來源: http : //dev.mysql.com/doc/refman/5.5/en/enum.html ):
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
但是,我總是說這樣解釋查詢:
EXPLAIN SELECT * FROM shirts WHERE size='medium';
將告訴您有關查詢的大量信息,並有助於構建更好的表結構。 為此,讓 phpmyadmin 提出一個表表結構是有用的——但是當表已經填滿了大量數據時,這是一個更長時間的優化可能性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.