int(11)
MySQL の列のサイズはバイトで何ですか?
そして、この列に格納できる最大値は?
int(11)
MySQL の列のサイズはバイトで何ですか?
そして、この列に格納できる最大値は?
回答:
INT
常に指定されているものの長さに関係なく、バイト4になります。
TINYINT
= 1バイト(8ビット)SMALLINT
= 2バイト(16ビット)MEDIUMINT
= 3バイト(24ビット)INT
= 4バイト(32ビット)BIGINT
= 8バイト(64ビット)。長さは、mysqlコマンドラインクライアントでデータを選択するときに埋め込む文字数を指定するだけです。12345として保存された12345 int(3)
は引き続き12345としてint(10)
表示されますが、保存された場合、12345として表示されますが、最初の5桁を埋め込むオプションがあります。たとえば、追加ZEROFILL
した場合、0000012345と表示されます。
...そして最大値は2147483647(署名あり)または4294967295(署名なし)になります
INT(x)は、表示の点でのみ違いがあります。つまり、数値をx桁で表示し、11に制限されません。を使用してペアにするとZEROFILL
、長さに一致するまでゼロが付加されます。
だから、任意の数のためのxでINT(x)
格納された値の桁数がxより少ない場合は、ZEROFILL
ゼロが付加されます。
INT(5)ZEROFILL 32の記憶値とが表示され00032
INT(5) 32の記憶値とが表示される32
INT 32の記憶値とが表示される32
格納されている値の桁数がxより多い場合は、そのまま表示されます。
INT(3)ZEROFILL 250000の記憶値とが表示され250000
INT(3) 250000の記憶値とが表示され250000
INT 250000の記憶値とが表示され250000を
データベースに保存されている実際の値は影響を受けず、サイズは同じであり、計算は正常に動作します。
これは、BIGINT、MEDIUMINT、SMALLINT、およびTINYINTにも適用されます。
ZEROFILL
。
ここによるとint(11)
、2^(31) = 2147483648
最大値と-2147483648
最小値を持つ32ビットのスペースである4バイトのスペースが必要になり ます。1ビットは符号用です。
他の人が言ったように、列に格納できる最小値と最大値、およびバイト単位で必要なストレージの量は、長さではなく、タイプによってのみ定義されます。
これらの回答の多くは、(11)
パーツがディスプレイの幅にのみ影響を与えると言っていますが、正確には正しくありませんが、ほとんどです。
ゼロフィルが指定されint(2)
ていないの定義は、次のようになります。
100
100
と出力を(ありません0
か、00
)(2)
実行するのは、zerofillも指定されている場合のみです。
1
が表示され01
ます。すべてのニュアンスを確認する最良の方法は、実行することです:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
出力されます:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
この回答はLinuxのMySQL 5.7.12に対してテストされており、他の実装では異なる場合と異なる場合があります。
これについての良い説明はここ
にあります。要約すると:varchar(N)の場合のように、int(N)のNは、列に許可されている最大サイズと混同されることがよくあります。
ただし、これは整数データ型の場合とは異なります。括弧内の数値Nは列の最大サイズではなく、MySQLを介してテーブルのデータが表示されているときに列を表示する幅をMySQLに通知するための単なるパラメーターです。コンソール(ZEROFILL属性を使用している場合)。
角括弧内の数値は、MySQLに入力整数を埋め込むゼロの数を示します。例:INT(5)に設定されているカラムでZEROFILLを使用していて、数値78が挿入されている場合、MySQLは、数値が括弧内の数値を満たすまで、その値にゼロを埋め込みます。つまり、78は00078になり、127は00127になります。要約すると、括弧内の数字は表示のために使用されます。
ある意味で、角かっこ内の数値は、ZEROFILL属性を使用している場合を除いて、無意味です。
int型のためのサイズは同じ、すなわち、残るので、署名のための2147483648に-2147483648と 符号なしのための4294967295に0(約21億5000万および42億。これは、20億を超える行が含まれていない限りデータベースに影響を与えないため、括弧内のNの背後にあるストーリーに気付かない理由の1つです)、およびバイト数4バイトになります。
整数型のサイズ/範囲の詳細については、MySQLのマニュアルを参照してください。
この答えが見つかる可能性は低いですが、以下の説明は行う価値があります。
BIT OF DETAIL
表示幅は、明らかに、ゼロで埋められた数値で表示するゼロの数に関するメタデータを提供することを目的としています。
クエリから返された数値が指定された表示幅を超える場合、その数値の長さは実際には制限されません。
MySQLで整数データ型に実際に許可されている長さ/幅を知るには、リストとリンクを参照してください:(types:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT);
したがって、上記のように、列がZEROFILL列として指定されていない限り、
または
データがアプリケーションにプルされ、そのアプリケーションが他の種類のパディングに使用する表示幅。
プライマリリファレンス:https : //blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
で桁をずらすことができなかったので、ええと、それはブルクラップです。ゼロフィルに関しては何もしません。
この本によると:
MySQLでは、INT(11)などの整数型の「幅」を指定できます。これはほとんどのアプリケーションにとって意味がありません。値の正当な範囲を制限するのではなく、MySQLの対話型ツールが表示目的で予約する文字数を指定するだけです。ストレージおよび計算の目的で、INT(1)はINT(20)と同じです。