web-dev-qa-db-ja.com

Mysqlのint(11)のカラムのサイズはバイト単位で何ですか

Mysqlのint(11)のカラムサイズはバイト単位で何バイトですか?

そして、この列に格納できる最大値は?

419
Gaurav

INTは、指定された長さに関係なく、常に4バイトです。

  • TINYINT = 1バイト(8ビット)
  • SMALLINT = 2バイト(16ビット)
  • MEDIUMINT = 3バイト(24ビット)
  • INT = 4バイト(32ビット)
  • BIGINT = 8バイト(64ビット).

長さは、mysqlコマンドラインクライアントでデータを選択するときに表示する文字数を指定するだけです。

...そして最大値は2147483647(符号付き)または4294967295(符号なし)になります

590
Matt MacLean

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にも当てはまります。

127
priyabagus

here によると、int(11)は最大4バイトの2^(31) = 2147483648 max値と-2147483648min値の4バイトのスペースを取ります。 1ビットはサイン用です。

100
Santosh Linkha

他の人が言っているように、列が格納できる最小/最大値とそれがどのくらいのストレージをバイトで取るかは長さではなくタイプによってのみ定義されます。

これらの答えの多くは、(11)の部分は表示幅にのみ影響すると言っています。

zerofillが指定されていないint(2)の定義は:

  • まだ100の値を受け入れます
  • 出力時にdisplayの値は100である(0または00ではない)
  • display widthは、selectクエリから出力される最大値の幅になります。

(2)がすることはzerofillも指定されていればだけです

  • 1の値は01と表示されます。
  • 値を表示するとき、列は常に、列に表示する必要がある最大値を表示するのに必要な最小幅ではなく、列が取り得る最大の値のwidthを持ちます。その特定の選択クエリは、はるかに小さい可能性があります。
  • 列はまだ取ることができ、長さを超える値を表示しますが、これらの値の先頭には0が付きません。

すべてのニュアンスを見るための最良の方法は、実行することです。

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に対してテストされており、他の実装とは異なる場合もあれば異なる場合もあります。

31
Programster

Mysqlのint(11)のカラムのサイズはバイト単位で何ですか

(11) - intデータ型のこの属性は、列のサイズとは無関係です。整数データ型の表示幅だけです。 11.1.4.5から。数値型属性

MySQLはタイプのbaseキーワードに続くかっこ内の整数データタイプの表示幅をオプションで指定するための拡張をサポートします。たとえば、INT(4)は表示幅が4桁のINTを指定します。

30
ks1322

これの良い説明は 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 を参照してください

19
shashi009

この答えが見られることはまずありませんが、私は次のような説明をする価値があると思います。

  • mySQLの整数データ型の後ろの(n)は表示幅を指定しています
  • 表示幅は、クエリから返される数の長さを制限しません
  • 表示幅は、ゼロが埋められた列に埋められるゼロの数を制限して、合計数が表示幅と一致するようにします(実際の数が表示幅を超えない限り、その場合は数値はそのまま表示されます)。
  • 表示幅は、開発者が値の長さをどの程度の長さにするかを知るための便利なツールとしても意味があります。

詳細情報のビット
表示幅は、明らかに、ゼロ埋め数に表示するゼロの数に関するメタデータを提供することを目的としています。
クエリから返される数値の長さが、指定された表示幅を超えても実際には制限されません。
MySQLで整数データ型に実際に許容される長さ/幅を知るには、リスト&linkを参照してください。( タイプ:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT );
上記のことを踏まえて、列がZEROFILL列として指定されていない限り、表示幅は標準クエリの結果に影響を与えないと予想できます。
または
データがアプリケーションに取り込まれていて、そのアプリケーションが他の種類のパディングに使用する表示幅を収集している場合。

主な参考資料: https://blogs.Oracle.com/jsmyth/entry/what_does_the_11_mean

10
MER

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

5
Sachin Agrawal

これによると

MySQLでは、INT(11)などの整数型に「幅」を指定できます。これはほとんどのアプリケーションには意味がありません。値の有効範囲を制限するのではなく、単にMySQLの対話型ツールが表示目的で予約する文字数を指定するだけです。格納と計算の目的で、INT(1)はINT(20)と同じです。