99

ブール日付タイプを使用して、trueまたはfalseの2つの状態のみを格納する必要があるサイトのデータベースを設計していました。MySQLを使用しています。
phpMyAdminを使用してデータベースを設計しているときに、BOOLEANデータ型とTINYINTデータ型の両方があることがわかりました。
私はさまざまな記事を読みましたが、TINYINTはBOOLEANと同じであり、違いはないと言う人もいました。MySQLではBOOLEANがTINYINTに変換されると言う人もいます。

私の質問は、両方が同じである場合、なぜ2つ存在するのかということです。それらは1つだけである必要があります。

これが私が読んだ記事への参照です:http:
//www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type -overview.html

4

5 に答える 5

143

MySQLには内部ブールデータ型がありません。最小の整数データ型であるTINYINTを使用します。

BOOLEANとBOOLは、同義語であるため、TINYINT(1)と同等です。

このテーブルを作成してみてください-

CREATE TABLE table1 (
  column1 BOOLEAN DEFAULT NULL
);

次に、SHOW CREATE TABLEを実行すると、この出力が得られます-

CREATE TABLE `table1` (
  `column1` tinyint(1) DEFAULT NULL
)
于 2012-06-23T07:49:54.867 に答える
33

php開発者へのメモ(コメントとして投稿するために必要なstackoverflowポイントがありません)... TINYINTへの自動(およびサイレント)変換は、phpが「BOOLEAN」列から「0」または「1」、期待された(私が)真/偽ではありません。

テーブルの作成に使用されたSQLを調べていて、「some_boolean BOOLEAN NOT NULL DEFAULT FALSE」のようなものが表示される開発者は、その列を含む行が取得されたときにtrue/falseの結果が表示されることを合理的に期待できます。代わりに(少なくとも私のバージョンのPHPでは)、結果は「0」または「1」になります(はい、文字列「0」または文字列「1」であり、int 0/1ではありません。phpに感謝します)。

これはちょっとしたことですが、単体テストを失敗させるには十分です。

于 2014-12-04T21:29:13.133 に答える
24

最新のMySQLバージョンには新しいBITデータ型があり、フィールドのビット数を指定できます。たとえば、またはのみであるため、型BIT(1)として使用できます。Boolean01

于 2013-06-25T13:33:42.447 に答える
7

MySql5.1バージョンリファレンス現在

BIT(M) =  approximately (M+7)/8 bytes, 
BIT(1) =  (1+7)/8 = 1 bytes (8 bits)

================================================== =======================

TINYINT(1) take 8 bits.

https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric

于 2014-10-27T12:31:40.950 に答える
4

MySQLの数値型の概要は次のように述べています。BOOL、BOOLEAN:これらの型はTINYINT(1)の同義語です。ゼロの値はfalseと見なされます。ゼロ以外の値は真と見なされます。

ここを参照してください: https ://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html

于 2018-01-11T11:18:01.290 に答える