web-dev-qa-db-ja.com

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

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

どのような場合にこれらを使用すべきですか?

338
Sein Kraft

それらは異なる量のスペースを取り、それらは異なる範囲の許容値を持ちます。

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 

"unsigned"型はMySQLでのみ使用可能で、残りは符号付き範囲を使用しますが、1つの注目に値する例外があります。 SQL Serverのtinyintはunsigned で、0から255の値の範囲

525
Daniel DiPaolo

必要なストレージのサイズとその数がどれだけ大きくなる可能性があるか

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バイトを使用します。

28
SQLMenace

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

ドキュメンテーション によると、彼らはかかります:

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

そして当然のことながら、ますます広い範囲の数字を受け入れます。

12
ANeves

現実の世界でこれらのデータ型が使用されるようになると、特定の整数型を使用するのはやり過ぎや使い過ぎになる可能性があることを理解しておくことが非常に重要です。たとえば、表のemployeeCountにintegerデータ型を使用すると、employeeは、マイナス2億からプラス2億、またはゼロから約40億(符号なし)の整数値の範囲をサポートするため、やり過ぎになる可能性があります。したがって、Walmartのように米国の最大雇用者で、約220万人の従業員がemployeeCount列に整数データ型を使用していると考える場合でも、不要です。そのような場合には、例えば、mediumint(0〜1600万(符号なし)をサポート)を使用します。あなたの範囲が異常に大きいと予想されるならば、あなたはあなたがダニエルのノートからわかることができるようにbigintを考慮するかもしれないと言ったことは私が解読する気にするより大きい範囲をサポートする。

8
Anil M

違いは、各整数に割り当てられたメモリの量と、それぞれが格納できる数の大きさです。

3

データ型範囲記憶域

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;
2
Vikram Rathaur