MySQLにおけるtinyint, smallint, mediumint, bigint, intの違い
MySQLでは、数値データを格納するためにさまざまな整数型が用意されています。これらの型は、扱える数値の範囲や使用するストレージ容量が異なります。
各型の特徴
- tinyint: 最も小さい整数型で、-128から127までの値を格納できます。
- smallint: tinyintよりも大きい整数型で、-32,768から32,767までの値を格納できます。
- mediumint: smallintよりも大きい整数型で、-8,388,608から8,388,607までの値を格納できます。
- bigint: 最も大きい整数型で、-9,223,372,036,854,775,808から9,223,372,036,854,775,807までの値を格納できます。
- int: 一般的な整数型で、-2,147,483,648から2,147,483,647までの値を格納できます。
いつどの型を使うべきか
- tinyint: 非常に小さい数値のみを扱う場合に最適です。
- smallint: 小さい数値を扱う場合に適しています。
- mediumint: 中規模の数値を扱う場合に使用できます。
- bigint: 大きな数値を扱う場合に必要です。
- int: 一般的な整数値を扱う場合に適しています。
例:
CREATE TABLE my_table (
id tinyint NOT NULL AUTO_INCREMENT,
quantity smallint NOT NULL,
price int NOT NULL,
PRIMARY KEY (id)
);
この例では、id
は小さな整数値であるため、tinyint
が使用されています。quantity
は中規模の数値であるため、smallint
が使用されています。price
は一般的な整数値であるため、int
が使用されています。
MySQLにおける整数型の選び方と例
例
適切な整数型を使用する例
CREATE TABLE products (
id tinyint NOT NULL AUTO_INCREMENT,
quantity smallint NOT NULL,
price int NOT NULL,
PRIMARY KEY (id)
);
- id: 製品番号として使用されるため、小さな整数値で十分です。
- quantity: 在庫数として使用されるため、中規模の数値で十分です。
- price: 価格として使用されるため、一般的な整数値で十分です。
CREATE TABLE users (
id tinyint NOT NULL AUTO_INCREMENT,
phone_number bigint NOT NULL,
PRIMARY KEY (id)
);
この例では、phone_number
は大きな数値であるため、tinyint
は不適切です。適切な型はbigint
です。
CREATE TABLE orders (
id smallint NOT NULL AUTO_INCREMENT,
total_price int NOT NULL,
PRIMARY KEY (id)
);
代替方法
浮動小数点型
- float: 単精度浮動小数点型で、約7桁の精度を持ちます。
浮動小数点型は、整数型よりも精度が低く、計算誤差が発生する可能性があります。
文字列型
- varchar: 可変長文字列型で、文字列を格納できます。
- char: 固定長文字列型で、指定された長さの文字列を格納できます。
文字列型は、数値を文字列として格納するため、数値演算を行うことができません。
カスタムデータ型
- MySQLのストアドプロシージャや関数を使用して、独自のデータ型を作成することができます。
カスタムデータ型は、特定の要件に合わせて柔軟なデータ型を作成することができますが、実装が複雑になる場合があります。
CREATE TABLE products (
id tinyint NOT NULL AUTO_INCREMENT,
quantity smallint NOT NULL,
price int NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE users (
id tinyint NOT NULL AUTO_INCREMENT,
phone_number bigint NOT NULL,
PRIMARY KEY (id)
);
浮動小数点型を使用する例
CREATE TABLE measurements (
value float NOT NULL
);
この例では、value
は浮動小数点型であるため、小数点以下の値を格納することができます。
文字列型を使用する例
CREATE TABLE codes (
code varchar(10) NOT NULL
);
mysql integer