web-dev-qa-db-ja.com

MySQLブール値 "tinyint(1)"は最大127の値を保持しますか?

アイテムの在庫があるかどうかのtrue/falseフィールドを作成したかった。

ブール値(tinyint(1)に変換される)に設定したかった。1は在庫あり、0は在庫なし。

ベンダーからフィードを取得しているので、「在庫がいくつある場合はどうなりますか」と思いました。

だから私は1よりも大きい数を挿入するとどうなるか疑問に思いました。デフォルトは1になると想定しました。

驚いたことに、デフォルトで127を超える127までの任意の数を保持できます。

誰でもその理由を説明できますか?

37
JD Isaacks

符号付きTINYINTデータ型には、-128〜127の整数値を格納できます。

ただし、TINYINT(1)は、格納できる最小値または最大値を変更しません。そのタイプの値が出力として印刷されるとき、それはただdisplayに1桁だけを言う。

56
BoltClock

tinyintデータ型は、1バイトのストレージを使用します。 256個の可能な整数値を1バイト(-128〜127)を使用して保存できます。 tinyint unsignedとして定義すると、負の値は破棄されるため、保存できます(0〜255)。

7
Nathan

MySQLがこれを処理する方法については、 here を参照してください。 MySQL> 5.0.5を使用する場合、BITをデータ型として使用できます(古いバージョンではBITTINYINT(1)として解釈されます。ただし、(1)- partは単なる表示幅であり、内部の長さではありません。

6
mdm
CREATE TABLE foo_test(
col_1 TINYINT
, col_2 TINYINT(2) 
, col_3 TINYINT(3) 
, col_4 TINYINT(2) ZEROFILL
, col_5 TINYINT(3) ZEROFILL
);

INSERT INTO foo_test( col_1,col_2,col_3,col_4,col_5 )
SELECT 1, 1,1,1,1
UNION ALL
SELECT 10, 10,10,10,10
UNION ALL
SELECT 100, 100,100,100,100;

SELECT * FROM foo_test; 

**OUTPUT:-**   
 col_1   col_2   col_3   col_4   col_5  
------  ------  ------  ------  --------
     1       1       1      01       001
    10      10      10      10       010
   100     100     100     100       100

テーブルの作成中にzerofillが使用されている場合、MySQLは開始時に0を表示します。 zerofillを使用しなかった場合、効果はありません。

0
Rabeel Javed