簡體   English   中英

MySQL 中的 True/False 與 0/1

[英]True/False vs 0/1 in MySQL

在 MySQL 數據庫中哪個更快 布爾值,還是使用零和一來表示布爾值? 我的前端只有一個是/否單選按鈕。

某些啟用了“使用布爾值”選項的“前端”會將所有 TINYINT(1) 列視為布爾值,反之亦然。

這允許您在應用程序中使用 TRUE 和 FALSE 而不是 1 和 0。

這根本不會影響數據庫,因為它是在應用程序中實現的。

MySQL 中並沒有真正的BOOLEAN類型。 BOOLEAN 只是 TINYINT(1) 的同義詞,TRUE 和 FALSE 是 1 和 0 的同義詞。

如果在編譯器中進行轉換,則應用程序的性能不會有任何差異。 否則,差異仍然不會很明顯。

您應該使用可以讓您更有效地編碼的任何方法,盡管不使用該功能可能會減少對特定“前端”供應商的依賴。

在 MySQL 中TRUEFALSETINYINT(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM