ブール型の日付型を使用してtrueまたはfalseの2つの状態のみを保存する必要があるサイトのデータベースを設計していました。 MySQLを使用しています。
phpMyAdminを使用してデータベースを設計しているときに、BOOLEANデータ型とTINYINTデータ型の両方があることがわかりました。
さまざまな記事を読みましたが、TINYINTはBOOLEANと同じで、違いはないと言う人もいました。 BOOLEANはMySQLで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
MySQLには内部ブールデータ型がありません。最小の整数データ型-TINYINTを使用します。
BOOLEANおよびBOOLは同義語であるため、TINYINT(1)と同等です。
このテーブルを作成してみてください-
CREATE TABLE table1 (
column1 BOOLEAN DEFAULT NULL
);
次にSHOW CREATE TABLEを実行すると、この出力が得られます-
CREATE TABLE `table1` (
`column1` tinyint(1) DEFAULT NULL
)
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)。
ちょっとしたことですが、単体テストが失敗するのに十分です。
最新のMySQLバージョンには、フィールドのビット数を指定できる新しいBIT
データ型があります。たとえば、0
または1
のみであるため、Boolean
型として使用するBIT(1)
です。
MySql 5.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
MySQLの数値型の概要:BOOL、BOOLEAN:これらの型はTINYINT(1)の同義語です。値ゼロは偽と見なされます。ゼロ以外の値は真と見なされます。
こちらをご覧ください: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html