MySQL における TINYINT(1)、TINYINT(2)、TINYINT(3)、TINYINT(4) の徹底比較
MySQL における TinyINT データ型の詳細
MySQL における TINYINT
データ型は、1 バイトの整数を格納するために使用されます。符号付き (SIGNED
) と符号なし (UNSIGNED
) の 2 種類があり、それぞれ異なる値の範囲を表現できます。
データ型
- TINYINT(4):
- データ型自体は
TINYINT(1)
と同じ - 表示幅のみ 4 桁まで
- データ型自体は
- TINYINT(1):
- 符号付き: -128 から 127 まで
- 符号なし: 0 から 255 まで
- データ型を選択する際には、格納する値の範囲と必要な表示幅を考慮する必要があります。
- 例えば、
TINYINT(1)
で格納される値を 2 桁で表示したい場合は、TINYINT(2)
を使用します。 - これらのデータ型は、主に表示幅を調整するために使用されます。
TINYINT(2)
,TINYINT(3)
,TINYINT(4)
は、データ型自体はTINYINT(1)
と同じであり、格納できる値の範囲も変わりません。
例
CREATE TABLE my_table (
id INT PRIMARY KEY AUTO_INCREMENT,
status TINYINT(1) NOT NULL,
comments VARCHAR(255)
);
上記の例では、status
列は TINYINT(1)
データ型で宣言されています。これは、status
列に格納される値が -128 から 127 の範囲であることを意味します。
- 符号付き (
SIGNED
) と符号なし (UNSIGNED
) の 2 種類があります。 TINYINT
データ型は、1 バイトの整数を格納するために使用されます。
- MySQL のバージョンによって、動作や仕様が異なる場合があります。
- この説明は、MySQL 8.0 を基準としています。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age TINYINT(3) NOT NULL,
is_active TINYINT(1) NOT NULL DEFAULT 1
);
INSERT INTO users (name, age, is_active) VALUES
('John Doe', 30, 1),
('Jane Doe', 25, 0);
SELECT * FROM users;
この例では、users
という名前のテーブルを作成し、その中に 3 つの列を定義しています。
is_active
: ユーザーがアクティブかどうかを表すフラグage
: ユーザーの年齢name
: ユーザーの名前id
: 主キーとして使用されるオートインクリメント列
例 2: TINYINT データ型の符号付きと符号なし
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
stock_quantity TINYINT(3) NOT NULL,
sales_count TINYINT(3) NOT NULL
);
INSERT INTO products (stock_quantity, sales_count) VALUES
(100, 50),
(-50, 100);
SELECT * FROM products;
sales_count
: 販売数stock_quantity
: 在庫数
stock_quantity
列は TINYINT(3)
データ型で宣言されていますが、符号付き (SIGNED
) として宣言されています。これは、stock_quantity
列に格納される値が -128 から 127 の範囲であることを意味します。
CREATE TABLE scores (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL,
math_score TINYINT(1) NOT NULL,
english_score TINYINT(2) NOT NULL,
science_score TINYINT(3) NOT NULL
);
INSERT INTO scores (student_id, math_score, english_score, science_score) VALUES
(1, 95, 80, 75),
(2, 80, 90, 65);
SELECT * FROM scores;
science_score
: 理科の点数english_score
: 英語の点数math_score
: 数学の点数student_id
: 生徒の ID
math_score
列は TINYINT(1)
データ型で宣言されています。これは、math_score
列に格納される値が -128 から 127 の範囲であることを意味します。しかし、TINYINT(1)
データ型の表示幅は 1 桁なので、実際の表示は -128
から 127
ではなく -127
から 127
となります。
TINYINT
データ型は、0 から 255 までの整数を格納できます。このことから、TINYINT
データ型を使用して、列挙型データを表現することができます。
例えば、以下の例では、曜日を表す列挙型データ型を定義しています。
CREATE TABLE days_of_the_week (
id INT PRIMARY KEY AUTO_INCREMENT,
day_name VARCHAR(20) NOT NULL,
day_number TINYINT(1) NOT NULL
);
INSERT INTO days_of_the_week (day_name, day_number) VALUES
('Sunday', 1),
('Monday', 2),
('Tuesday', 3),
('Wednesday', 4),
('Thursday', 5),
('Friday', 6),
('Saturday', 7);
このように、TINYINT
データ型を使用して、コンパクトかつ効率的に列挙型データを表現することができます。
ビットフラグの保存
TINYINT
データ型は、8 ビットの整数として格納されます。このことから、TINYINT
データ型を使用して、8 つのビットフラグを保存することができます。
例えば、以下の例では、ユーザーの権限を表すビットフラグを定義しています。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
permissions TINYINT(1) NOT NULL DEFAULT 0
);
UPDATE users
SET permissions = permissions | 1
WHERE username = 'admin';
SELECT permissions FROM users WHERE username = 'admin';
上記のコード例では、admin
ユーザーに 1
番目のビットフラグをセットしています。これは、admin
ユーザーに最初の権限が付与されたことを意味します。
小さな整数の保存
例えば、以下の例では、商品の個数を表す列を定義しています。
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(255) NOT NULL,
unit_price DECIMAL(10,2) NOT NULL,
stock_quantity TINYINT(3) NOT NULL
);
このように、TINYINT
データ型は、メモリ使用量を抑えながら、小さな整数を効率的に保存することができます。
注意事項
TINYINT
データ型は、小数点を含む値を格納できません。TINYINT
データ型は、1 バイトの整数として格納されるため、大きな整数を格納するには適していません。TINYINT
データ型は、-128 から 127 までの整数を格納できます。符号なし (UNSIGNED
) の場合は、0 から 255 までの整数を格納できます。
TINYINT
データ型は、MySQL における汎用性の高いデータ型です。列挙型データの表現、ビットフラグの保存、小さな整数の保存など、さまざまな用途に使用することができます。
mysql