mysqlのint(11)の列のサイズはバイトで何ですか?


488

int(11)MySQL の列のサイズはバイトで何ですか?

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



1
@cellepo 1つは汎用SQLで、もう1つはmysqlに固有です(さらに、この1つはより多くのビューを持っています)。だまし狩りに行き、一票ですぐに閉ざしてもらいたい場合は、SOBoticsチャットにアクセスしてpingしてください。しかし、閉じるにはmysql、到着前にタグを付ける必要があります。Thx-2016
ドリュー

6
ねえ、みんな。重複している可能性がありますが、より検索しやすくなっています。ほとんどの人は、int(11)を使用してこのように検索します。そしてそれは他の人々の質問を解決しています。他のビューと比較してビューの数を確認できます。そしてユーザーはここでより詳細な答えを見つけるでしょう。
Gaurav 2016年

回答:


685

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(署名なし)になります


111
次に、int(11)の11の意味は何ですか。
Gaurav

73
列INT(4)、整数1は、列がゼロフィルとして指定されている場合にのみ0001として表示されます。それ以外の場合は、追加の数字なしで、数値1として表示されます。@Gaurav-mysqlがデータを表示する方法とそれを格納する方法を混在させないでください。これらは2つの異なるものです。あなたが見るものはそれが実際に何であるかもしれないものではありません。
マイケルJV

13
@Michael Wow、本当に面白い。したがって、列INT(3)を作成して値5001を格納すると、5001が格納されますが、1のみが表示されます。私はそれを知りませんでした。
andrewtweber

16
@andrewtweber:フィールドがとして定義されている場合でも5001表示5001されINT(3)ます。以下とここで @priyabagusの回答を参照してください
go2null

10
整数フィールドの長さを指定しない場合、MySQLはデフォルト値(tinyint 4、smallint 6、mediumint 9、int 11、bigint 20)を設定します。これらのデフォルトの長さは、任意の数値を表示するのに十分であることに注意してください。このフィールドに格納できます(例:smallintの最大値は2 ^ 16 = 65536、5桁)。特に理由がない限り、予期せぬ事態を避けるためにデフォルトのサイズのままにしておくことをお勧めします。
Thibault Witzig 2017年

167

INT(x、表示の点でのみ違いがあります。つまり、数値をxで表示し、11に制限されません。を使用してペアにするとZEROFILL、長さに一致するまでゼロが付加されます。

だから、任意の数のためのxINT(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にも適用されます。


49
したがって、ゼロフィルを使用しない限り、長さはまったく何もしませんか?
developerbmw

29
@developerbmw-正解です。あなたが使用しない限り、長さは絶対に何もしませんZEROFILL
リックジェームズ

ZEROFILLは基本的にメインフレーム互換モードです。
Henk Poley

114

ここによるとint(11)2^(31) = 2147483648最大値と-2147483648最小値を持つ32ビットのスペースである4バイトのスペースが必要になり ます。1ビットは符号用です。


1
あなたの例は9ナインを持っています。あなたの例が正しいことを確認していただけますか?もしそうなら、9ナインがあるのになぜ10と表示されるのですか 桁数に1を加えたものに符号を付けたものですか。
Homer6 2012

5
いいえ、unsigned int、つまり2 ^ 32の場合、最大数は4294967295です。括弧内の数値は、ストレージタイプには影響しません。2 ^ 32以上が必要な場合は、bigintに移動する必要があります。
キーランタリー2013年

7
というか、(2 ^ 32)-1。
キーランタリー2013年

2
+ Kieranは正しいです。最大数は答えのそれとは異なります。こちらをご覧ください
daviewales 2013

38

他の人が言ったように、列に格納できる最小値と最大値、およびバイト単位で必要なストレージの量は、長さではなく、タイプによってのみ定義されます。

これらの回答の多くは、(11)パーツがディスプレイの幅にのみ影響を与えると言っていますが、正確には正しくありませんが、ほとんどです。

ゼロフィルが指定されint(2)ていないの定義は、次のようになります

  • まだ値を受け入れます 100
  • まだ表示の値100と出力を(ありません0か、00
  • 表示幅は、選択クエリから最大値ビーイング出力の幅になります。

(2)実行するのは、zerofillも指定されている場合のみです。

  • の値1が表示され01ます。
  • 値を表示する場合、列には常に、列が取り得る最大値の幅があります。これは、特定の選択クエリで列が表示する必要がある最大値を表示するために必要な最小幅ではなく、整数の10桁です。 、はるかに小さい可能性があります。
  • 列は引き続き使用でき、長さを超える値を示しますが、これらの値の前に0は付きません。

すべてのニュアンスを確認する最良の方法は、実行することです:

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


5
列名「zerofill2は」「INT1」は4対9文字の長さであるという理由だけだ... EHM、「お知らせの長さが大きくzerofill2よりもはるかに小さい表示幅どのINT1列でいるにもかかわらず、」
neokio

2
...はい、そのため、ゼロフィルが有効になっていない場合でも、ディスプレイの幅に長さは影響しません。それ以外の場合、int1の方が幅が10文字でかなり広くなります。
Programster

2
確かな例を用いた良い説明。受け入れられたものよりはるかに良い答え。@Programsterに感謝します。
Corin

マイナーニット:neokioが指摘するように、このクエリからは、塗りつぶしがゼロの "int(3)"の正確な結果を観察できません。列名を「zf2」に短くして、動作を明確にします。具体的には、[(指定されたDBバージョンで)trueまたはfalseのどちらであっても、「(zerofillを使用して)値を表示する場合、列には常に、列が取り得る最大値の幅があり、これは整数の10桁です」
ToolmakerSteve

1
neokioのコメントとマイナーなnitコメントを明確にするために:「長さがより長くても、int1列の表示幅がzerofill2よりはるかに小さいことに注意してください。」答えから削除する必要があります。これは、ヘッダーワード「zerofill2」の文字数の結果です。ディスプレイの幅のテストとは関係ありません。その列に短い名前、たとえば "zf2"を付けた方が良いでしょう。次に、「int2とzf2が小さい幅(3)を指定している場合でも、int1、int2、およびzf2はすべてまったく同じ幅です」というテーブルがあります。
ToolmakerSteve

32

mysqlのint(11)の列のサイズはバイトで何ですか?

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

MySQLは、オプションで整数データ型の表示幅を括弧で囲んで型のベースキーワードの後に​​指定するための拡張をサポートしています。たとえば、INT(4)は、4桁の表示幅を持つINTを指定します。


19

これについての良い説明はここ

にあります。要約すると:varchar(N)の場合のように、int(N)のNは、列に許可されている最大サイズと混同されることがよくあります。

ただし、これは整数データ型の場合とは異なります。括弧内の数値Nは列の最大サイズではなく、MySQLを介してテーブルのデータが表示されているときに列を表示する幅をMySQLに通知するための単なるパラメーターです。コンソール(ZER​​OFILL属性を使用している場合)。

角括弧内の数値は、MySQLに入力整数を埋め込むゼロの数を示します。例:INT(5)に設定されているカラムでZEROFILLを使用していて、数値78が挿入されている場合、MySQLは、数値が括弧内の数値を満たすまで、その値にゼロを埋め込みます。つまり、78は00078になり、127は00127になります。要約すると、括弧内の数字は表示のために使用されます。
ある意味で、角かっこ内の数値は、ZEROFILL属性を使用している場合を除いて、無意味です。

int型のためのサイズは同じ、すなわち、残るので、署名のための2147483648に-2147483648符号なしのための4294967295に0(約21億5000万および42億。これは、20億を超える行が含まれていない限りデータベースに影響を与えないため、括弧内のNの背後にあるストーリーに気付かない理由の1つです)、およびバイト数4バイトになります

整数型のサイズ/範囲の詳細については、MySQLのマニュアルを参照してください。


ここで行数が関係するのはなぜですか?
Old Geezer

@OldGeezer-同意します。「行数」はほとんどの列には関係ありません。自動インクリメントの主キー(id)列にのみ関連します。
ToolmakerSteve

10

この答えが見つかる可能性は低いですが、以下の説明は行う価値があります。

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

BIT OF DETAIL
表示幅は、明らかに、ゼロで埋められた数値で表示するゼロの数に関するメタデータを提供することを目的としています。
クエリから返された数値が指定された表示幅を超える場合、その数値の長さは実際には制限されません。
MySQLで整数データ型に実際に許可されている長さ/幅を知るには、リストとリンクを参照してください:(types:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT);
したがって、上記のように、列がZEROFILL列として指定されていない限り、
または
データがアプリケーションにプルされ、そのアプリケーションが他の種類のパディングに使用する表示幅。

プライマリリファレンス:https : //blogs.oracle.com/jsmyth/entry/what_does_the_11_mean


適切な答えを提供していただきありがとうございます。私はMySQLコマンドラインから試していましたが、小さいnで桁をずらすことができなかったので、ええと、それはブルクラップです。ゼロフィルに関しては何もしません。
mpen 2016

@mpen私が助けてくれてうれしい、これは私が試みていた何かに関連していて、誰かに役立つかもしれないそれについてここにもっと詳細を置くことができると考えました。
MER 2016

9

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


0

この本によると:

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.