Mysqlのint(11)
のカラムサイズはバイト単位で何バイトですか?
そして、この列に格納できる最大値は?
INT
は、指定された長さに関係なく、常に4バイトです。
TINYINT
= 1バイト(8ビット)SMALLINT
= 2バイト(16ビット)MEDIUMINT
= 3バイト(24ビット)INT
= 4バイト(32ビット)BIGINT
= 8バイト(64ビット).長さは、mysqlコマンドラインクライアントでデータを選択するときに表示する文字数を指定するだけです。
...そして最大値は2147483647(符号付き)または4294967295(符号なし)になります
INT( 女性番号 )は、 表示の観点からのみ違いを生じます 、つまり、 ' 女性番号 'の桁数で表示され、11だけに制限されません。 ZEROFILL
を使用してペアにすると、長さに一致するまでゼロが追加されます。
データベースに保存された値は影響を受けないことに注意してください、どんな計算でもそれはそのままでふるまいます。
備考 :
値の桁数が ' somenumber 'より小さい場合、ZEROFILL
は先頭に0を付けます。
INT(5)ZEROFILL 32の格納値で 00032 が表示されます
INT(5) 32の保存値で 32 が表示されます
_ int _ の値が32の場合、 32 が表示されます。
値が ' someumber 'よりも桁数が多い場合は、保存されている値が表示されます。
INT(3)ZEROFILL 250000の格納値で 250000 が表示されます
INT(3) 250000の格納値で 250000 が表示されます
_ int _ 250000の格納値では 250000 と表示されます。
同様のことがBIGINT、MEDIUMINT、SMALLINT、およびTINYINTにも当てはまります。
here によると、int(11)
は最大4バイトの2^(31) = 2147483648
max値と-2147483648
min値の4バイトのスペースを取ります。 1ビットはサイン用です。
他の人が言っているように、列が格納できる最小/最大値とそれがどのくらいのストレージをバイトで取るかは長さではなくタイプによってのみ定義されます。
これらの答えの多くは、(11)
の部分は表示幅にのみ影響すると言っています。
zerofillが指定されていない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,
`zerofill1` int(10) ZEROFILL NOT NULL,
`zerofill2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zerofill1`, `zerofill2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
出力されます:
+----+-------+-------+------------+-----------+
| id | int1 | int2 | zerofill1 | zerofill2 |
+----+-------+-------+------------+-----------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-----------+
たとえ長さが長くても、int1
列の表示幅がzerofill2
よりはるかに小さいことに注意してください。
この答えはLinux用のMySQL 5.7.12に対してテストされており、他の実装とは異なる場合もあれば異なる場合もあります。
Mysqlのint(11)のカラムのサイズはバイト単位で何ですか
(11)
- int
データ型のこの属性は、列のサイズとは無関係です。整数データ型の表示幅だけです。 11.1.4.5から。数値型属性 :
MySQLはタイプのbaseキーワードに続くかっこ内の整数データタイプの表示幅をオプションで指定するための拡張をサポートします。たとえば、INT(4)は表示幅が4桁のINTを指定します。
これの良い説明は here にあります。
要約すると、int(N)の数値Nは、varchar(N)の場合のように、列に許可されている最大サイズと混同されることがよくあります。
しかし、これは整数データ型の場合ではありません括弧内の数値Nは列の最大サイズではなく、MySQLに列をいつ表示するかを伝えるパラメータですテーブルのデータは、MySQLコンソールを介して表示されています(ZEROFILL属性を使用している場合)。
カッコ内の数字は、着信整数を埋めるゼロの数をMySQLに指示します。たとえば、INT(5)に設定された列でZEROFILLを使用していて、78が挿入されている場合、MySQLは、数値が括弧内の数値を満たすまでその値にゼロを埋め込みます。つまり、78は00078になり、127は00127になります。要約すると、括弧内の数字は表示目的で使用されます。
ある意味で、括弧内の数字は、ZEROFILL属性を使用していない限り、無意味です。
したがって、intのサイズは同じままです。つまり、-2147483648〜2147483648署名付きおよび〜4294967295署名なし(〜21億5,000万と42億、 20億行を超えない限りデータベースにほとんど影響を与えないため、開発者がカッコ内の数値Nの背後にあるストーリーに気付かない理由の1つです。また、バイト数では4バイト。
整数型のサイズ/範囲の詳細については、 MySQL Manual を参照してください
この答えが見られることはまずありませんが、私は次のような説明をする価値があると思います。
詳細情報のビット
表示幅は、明らかに、ゼロ埋め数に表示するゼロの数に関するメタデータを提供することを目的としています。
クエリから返される数値の長さが、指定された表示幅を超えても実際には制限されません。
MySQLで整数データ型に実際に許容される長さ/幅を知るには、リスト&linkを参照してください。( タイプ:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT );
上記のことを踏まえて、列がZEROFILL列として指定されていない限り、表示幅は標準クエリの結果に影響を与えないと予想できます。
または
データがアプリケーションに取り込まれていて、そのアプリケーションが他の種類のパディングに使用する表示幅を収集している場合。
主な参考資料: https://blogs.Oracle.com/jsmyth/entry/what_does_the_11_mean
MySQLでは整数int(11)
のサイズは4バイトで、32ビットです。
符号付きの値は次のとおりです。-2^(32-1) to 0 to 2^(32-1)-1
= -2147483648 to 0 to 2147483647
符号なしの値は次のとおりです。0 to 2^32-1
= 0 to 4294967295
これによると 本 :
MySQLでは、INT(11)などの整数型に「幅」を指定できます。これはほとんどのアプリケーションには意味がありません。値の有効範囲を制限するのではなく、単にMySQLの対話型ツールが表示目的で予約する文字数を指定するだけです。格納と計算の目的で、INT(1)はINT(20)と同じです。