MySQLのtinyint、smallint、mediumint、bigint、intの違いは何ですか?


368

MySQLのtinyint、smallint、mediumint、bigint、intの違いは何ですか?

これらはどのような場合に使用する必要がありますか?

回答:


575

それらは異なる量のスペースを使用し、許容範囲の値の範囲が異なります。

SQL Serverの値のサイズと範囲は次のとおりです。他のRDBMSにも同様のドキュメントがあります。

それらはすべて同じ仕様を使用しますが(下記のいくつかのマイナーな例外を除く)、それらのタイプのさまざまな組み合わせをサポートします(OracleはNUMBERデータタイプしかないため含まれていません。上記のリンクを参照してください)。

             | SQL Server    MySQL   Postgres    DB2
---------------------------------------------------
tinyint      |     X           X                
smallint     |     X           X         X        X
mediumint    |                 X
int/integer  |     X           X         X        X 
bigint       |     X           X         X        X

また、それらは同じ値の範囲をサポートし(以下の1つの例外を除く)、すべて同じストレージ要件があります。

            | Bytes    Range (signed)                               Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint     | 1 byte   -128 to 127                                  0 to 255
smallint    | 2 bytes  -32768 to 32767                              0 to 65535
mediumint   | 3 bytes  -8388608 to 8388607                          0 to 16777215
int/integer | 4 bytes  -2147483648 to 2147483647                    0 to 4294967295
bigint      | 8 bytes  -9223372036854775808 to 9223372036854775807  0 to 18446744073709551615 

「署名されていない」タイプはMySQLでのみ使用でき、残りは署名された範囲を使用しますが、1つの注目すべき例外tinyintがあります。SQLServerでは、署名されておらず、値の範囲は0〜255です。


21
署名されていない型がMySQLでのみ使用可能であることを知りませんでした。これは、他のRDBMSよりもMySQLの大きな利点です。この回答が投稿された日から何か変更はありましたか?
biox 2013

3
@ダニエル、彼らは何を考えているのですか、なぜ3バイトに1つあるのに6バイトにはないのですか?
Pacerier 2014

10
@Pacerierはおそらく名前を付ける方法を知らなかったでしょう:))
Mihai Matei

5
彼らはそれをbigintと呼び、bigintの代わりにhumongousintと呼ぶべきでした。
MarioDS 2016

5
greatintはオプションであり、Oracleは米国の会社です。:)
osiris 2017年

32

必要なストレージのサイズと数がどれほど大きいか

SQL Server

tinyint 1バイト、0〜255

smallint 2バイト、-2 ^ 15(-32,768)から2 ^ 15-1(32,767)

int 4バイト、-2 ^ 31(-2,147,483,648)〜2 ^ 31-1(2,147,483,647)

bigint 8バイト、-2 ^ 63(-9,223,372,036,854,775,808)から2 ^ 63-1(9,223,372,036,854,775,807)

全部で4のうちの1を格納できますが、bigintは8バイトを使用し、tinyintは1バイトを使用します


15

これらはMySQLデータ型のようです。

彼らが取るドキュメントによると:

  1. tinyint = 1バイト
  2. smallint = 2バイト
  3. mediumint = 3バイト
  4. int = 4バイト
  5. bigint = 8バイト

そして当然ながら、ますます大きな範囲の数値を受け入れます。


9

これらのデータ型の実際の使用法に到達するとき、特定の整数型を使用するのは、やり過ぎまたは不十分に使用される可能性があることを理解することが非常に重要です。たとえば、テーブルでemployeeCountに整数データ型を使用すると、負の20億から正の20億またはゼロから約40億(符号なし)までの整数値の範囲がサポートされるため、従業員はやり過ぎになる可能性があります。したがって、たとえ約220万人の従業員を抱えるWalmartなどの米国最大の雇用主の1人を考えても、employeeCount列に整数データ型を使用する必要はありません。このような場合、たとえば、mediumint(0〜1600万(符号なし)をサポート)を使用します。あなたの範囲が異常に大きいと予想される場合、ダニエルからわかるようにbigintを検討するかもしれないと言った


2
220万人のアクティブな従業員を抱えるWalMartの例では、年間約50%のスタッフの離職率では、EmployeeIDのINTタイプが最低限必要だと思います。どう思いますか?確かに-ほとんどの通常の企業にとって、INTタイプはやりすぎです!
キルタネン2018


2

データ型範囲ストレージ

bigint  -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807)    8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647)    4 Bytes
smallint    -2^15 (-32,768) to 2^15-1 (32,767)  2 Bytes
tinyint 0 to 255    1 Byte

次の例では、bigint、int、smallint、およびtinyintデータ型を使用してテーブルを作成します。値は各列に挿入され、SELECTステートメントで返されます。

CREATE TABLE dbo.MyTable
(
  MyBigIntColumn bigint
 ,MyIntColumn  int
 ,MySmallIntColumn smallint
 ,MyTinyIntColumn tinyint
);

GO

INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
 GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.