【MySQL初心者向け】INT(11) vs INT(M): それぞれの違いと使い分けを徹底解説
MySQLにおける INT(11)
と INT(M)
の違い
MySQLの整数型データ型において、INT(11)
と INT(M)
の表記がよく見られます。一見似ているように見えますが、実は微妙な違いがあります。この違いを理解することは、データベース設計とパフォーマンスチューニングにおいて重要です。
データ格納範囲
INT(M)
: 符号付きまたは符号なし整数を格納できます。範囲は、M
の値によって異なります。- M が 1 から 10:
INT(11)
と同じ範囲です。 - M が 11 から 20: より大きな整数を格納できます。範囲は
2^(M-1)
から-2^(M-1) - 1
までです。
- M が 1 から 10:
表示幅
INT(M)
: 表示幅はM
桁です。INT(11)
と同様に、実際の格納容量とは関係ありません。INT(11)
: 表示幅は 11 桁です。これは、数値データを表示する際に、左側を空白で埋める最大桁数を指定します。実際の格納容量とは関係ありません。
BIGINT
型を使用する場合は、より大きな整数を格納できます。M
には、1 から 20 までの整数を指定する必要があります。INT(M)
は、MySQL 5.0.15以降で使用できます。
どちらを選ぶべきか?
一般的には、以下の条件に基づいてデータ型を選択することをお勧めします。
- 表示幅を揃えたい場合は、
INT(M)
を使用します。 - より大きな整数を格納する場合は、
INT(M)
またはBIGINT
を使用します。 - 格納する整数の範囲が -2,147,483,648 から 2,147,483,647 までの場合は、
INT(11)
またはINT
を使用します。
例
CREATE TABLE users (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
age TINYINT NOT NULL,
score BIGINT
);
この例では、id
カラムには INT(11)
を使用して、最大 10 桁の主キーを格納します。age
カラムには、0 から 255 までの値を格納できる TINYINT
を使用します。score
カラムには、非常に大きな値を格納できる BIGINT
を使用します。
CREATE TABLE data_types (
id INT(11) NOT NULL,
small_int TINYINT NOT NULL,
medium_int MEDIUMINT NOT NULL,
big_int BIGINT NOT NULL,
unsigned_int INT(10) UNSIGNED NOT NULL
);
INSERT INTO data_types (id, small_int, medium_int, big_int, unsigned_int)
VALUES (1, 127, 65535, 9223372036854775807, 4294967295);
SELECT * FROM data_types;
このコードを実行すると、以下の結果が得られます。
id | small_int | medium_int | big_int | unsigned_int
---+-----------+------------+------------------------+-------------
1 | 127 | 65535 | 9223372036854775807 | 4294967295
unsigned_int
カラムには、0 から 4,294,967,295 までの値を格納できます。big_int
カラムには、-9,223,372,036,854,775,807 から 9,223,372,036,854,775,807 までの値を格納できます。medium_int
カラムには、-32,768 から 32,767 までの値を格納できます。
CREATE TABLE data_display (
id INT(5) NOT NULL,
value INT(11) NOT NULL
);
INSERT INTO data_display (id, value)
VALUES (1, 12345);
SELECT * FROM data_display;
id | value
---+-------
1 | 0012345
value
カラムはINT(11)
型ですが、表示幅はINT(5)
に指定されています。そのため、値は左側を 0 で埋めて 5 桁で表示されます。
INT(M) の使用例
CREATE TABLE large_numbers (
id INT(20) NOT NULL AUTO_INCREMENT,
large_value BIGINT NOT NULL
);
INSERT INTO large_numbers (large_value)
VALUES (12345678901234567890);
SELECT * FROM large_numbers;
id | large_value
---+------------------------------------------
1 | 12345678901234567890
large_value
カラムはINT(20)
型を使用しています。これは、BIGINT
型よりも大きな整数を格納できます。
INT(11)
と INT(M)
以外の選択肢
TINYINT
INT(11)
とINT(M)
よりも小さいメモリ容量と CPU 使用量で済みます。- 主に、小さな整数を格納する場合に使用されます。
- -128 から 127 までの値を格納できます。
- 1 バイトの領域を使用します。
SMALLINT
TINYINT
よりも大きな整数を格納する場合に使用されます。
MEDIUMINT
INT(11)
と同程度のメモリ容量と CPU 使用量になります。- -2,147,483,648 から 2,147,483,647 までの値を格納できます。
BIGINT
BIT
型: ビット列を格納します。BOOLEAN
型: 真偽値を格納します。
どのデータ型を選択すべきか
適切なデータ型を選択するには、以下の要素を考慮する必要があります。
- 将来の拡張性
- 表示形式
- メモリ容量と CPU 使用量
- 格納する値の範囲
一般的には、必要な最小限の大きさのデータ型を選択することが推奨されます。例えば、0 から 255 までの値を格納する場合は、TINYINT
型を使用する方が効率的です。
mysql