アイテムの在庫があるかどうかのtrue/falseフィールドを作成したかった。
ブール値(tinyint(1)
に変換される)に設定したかった。1は在庫あり、0は在庫なし。
ベンダーからフィードを取得しているので、「在庫がいくつある場合はどうなりますか」と思いました。
だから私は1よりも大きい数を挿入するとどうなるか疑問に思いました。デフォルトは1になると想定しました。
驚いたことに、デフォルトで127を超える127までの任意の数を保持できます。
誰でもその理由を説明できますか?
符号付きTINYINT
データ型には、-128〜127の整数値を格納できます。
ただし、TINYINT(1)
は、格納できる最小値または最大値を変更しません。そのタイプの値が出力として印刷されるとき、それはただdisplayに1桁だけを言う。
tinyint
データ型は、1バイトのストレージを使用します。 256個の可能な整数値を1バイト(-128〜127)を使用して保存できます。 tinyint unsigned
として定義すると、負の値は破棄されるため、保存できます(0〜255)。
MySQLがこれを処理する方法については、 here を参照してください。 MySQL> 5.0.5を使用する場合、BIT
をデータ型として使用できます(古いバージョンではBIT
はTINYINT(1)
として解釈されます。ただし、(1)
- partは単なる表示幅であり、内部の長さではありません。
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を使用しなかった場合、効果はありません。