MySQLのデータ型を完全解説!初心者でもわかる使い分けガイド
生徒
「MySQLのデータ型って何ですか?難しそうで不安です…」
先生
「データ型は、データベースに保存する情報の種類を指定するものです。例えば、数字を入れる箱、文字を入れる箱、日付を入れる箱のように、入れるものによって箱の種類を変えるイメージですね。」
生徒
「なるほど!でも種類がたくさんあって覚えられるか心配です…」
先生
「大丈夫です。よく使うものは限られていますし、それぞれの特徴を理解すれば自然に使い分けられるようになりますよ。」
1. MySQLのデータ型とは何か?
MySQLのデータ型とは、データベースのテーブルに保存するデータの種類を定義するものです。紙の帳簿で例えると、年齢の欄には数字しか書かない、名前の欄には文字を書く、というルールを決めるようなものです。
データ型を正しく設定することで、データベースは効率よくデータを保存し、検索や計算を正確に行えるようになります。間違ったデータ型を選ぶと、無駄に容量を使ったり、エラーが発生したりすることがあります。
エンジニアの必須スキル「SQL」を、 図解と豊富な練習問題でゼロから体系的に学びたい人へ。 MySQLやPostgreSQLなど、各種データベースに対応した不朽の入門書です。
SQL 第2版 ゼロからはじめるデータベース操作をAmazonで見る※ Amazon広告リンク
2. 数値型データ型の種類と使い分け
数値型は、数字を扱うためのデータ型です。MySQLには整数を扱う型と小数を扱う型があり、それぞれ保存できる数値の範囲が異なります。
整数型の種類
整数型には、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINTの5種類があります。それぞれ保存できる数値の範囲が違い、小さい型ほど使用する容量が少なくなります。
- TINYINT: -128から127まで保存可能。年齢や月など小さな数値に最適です。
- SMALLINT: -32768から32767まで保存可能。在庫数や順位などに使います。
- INT: 約-21億から21億まで保存可能。会員番号やIDなど一般的な数値に使います。
- BIGINT: 非常に大きな数値を保存可能。アクセス数や金額など大きな数値に使います。
テーブル作成の例を見てみましょう。会員情報を保存するテーブルを作成します。
CREATE TABLE members (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age TINYINT,
point INT
);
このテーブルにデータを登録してみます。
INSERT INTO members (name, age, point) VALUES
('山田太郎', 25, 1500),
('佐藤花子', 32, 2800),
('鈴木一郎', 19, 500),
('田中美咲', 45, 12000);
登録されたデータは以下のようになります。
id | name | age | point
---+------------+-----+-------
1 | 山田太郎 | 25 | 1500
2 | 佐藤花子 | 32 | 2800
3 | 鈴木一郎 | 19 | 500
4 | 田中美咲 | 45 | 12000
小数型の種類
小数を扱う場合は、FLOAT、DOUBLE、DECIMALを使います。FLOATとDOUBLEは近似値を保存し、DECIMALは正確な値を保存します。
- DECIMAL: 金額など正確な計算が必要な場合に使います。DECIMAL(10,2)のように桁数を指定します。
- FLOAT: 科学計算など多少の誤差が許される場合に使います。
3. 文字列型データ型の特徴と選び方
文字列型は、名前や住所などの文字データを保存するためのデータ型です。主にCHAR、VARCHAR、TEXTの3種類が使われます。
CHARとVARCHARの違い
CHARは固定長、VARCHARは可変長の文字列型です。CHARは指定した文字数分の領域を常に確保し、VARCHARは実際の文字数分だけ領域を使います。
- CHAR: 常に同じ文字数のデータに最適。都道府県コードや性別コードなど。
- VARCHAR: 文字数が変動するデータに最適。名前、メールアドレス、住所など。
- TEXT: 長文を保存する場合に使用。ブログ記事や商品説明など。
商品テーブルを作成する例です。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
code CHAR(8),
name VARCHAR(100),
description TEXT,
price DECIMAL(10,2)
);
商品データを登録します。
INSERT INTO products (code, name, description, price) VALUES
('PRD00001', 'ノートパソコン', '高性能な15インチノートパソコンです', 98000.00),
('PRD00002', 'マウス', 'ワイヤレスマウス', 2500.00),
('PRD00003', 'キーボード', 'メカニカルキーボード', 15000.00),
('PRD00004', 'モニター', '27インチ4Kモニター', 45000.00);
登録されたデータの確認です。
id | code | name | description | price
---+----------+------------------+--------------------------------------+----------
1 | PRD00001 | ノートパソコン | 高性能な15インチノートパソコンです | 98000.00
2 | PRD00002 | マウス | ワイヤレスマウス | 2500.00
3 | PRD00003 | キーボード | メカニカルキーボード | 15000.00
4 | PRD00004 | モニター | 27インチ4Kモニター | 45000.00
4. 日付・時刻型データ型の活用方法
日付や時刻を扱う場合は、DATE、TIME、DATETIME、TIMESTAMPなどの日付時刻型を使います。これらは日付の計算や比較を簡単に行えるように設計されています。
- DATE: 年月日のみを保存します。誕生日や記念日などに使用します。
- TIME: 時刻のみを保存します。営業時間や所要時間などに使用します。
- DATETIME: 年月日と時刻を保存します。イベント日時や予約時刻などに使用します。
- TIMESTAMP: DATETIMEと似ていますが、レコードの作成・更新日時の記録に最適です。
予約管理システムのテーブル例を見てみましょう。
CREATE TABLE reservations (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(50),
reservation_date DATE,
reservation_time TIME,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
予約データを登録してみます。
INSERT INTO reservations (customer_name, reservation_date, reservation_time) VALUES
('高橋健太', '2026-02-15', '10:00:00'),
('伊藤由美', '2026-02-15', '14:30:00'),
('渡辺修', '2026-02-16', '11:00:00'),
('中村真理', '2026-02-17', '15:00:00'),
('小林直樹', '2026-02-18', '09:30:00');
登録された予約データです。
id | customer_name | reservation_date | reservation_time | created_at
---+---------------+------------------+------------------+---------------------
1 | 高橋健太 | 2026-02-15 | 10:00:00 | 2026-01-06 10:30:15
2 | 伊藤由美 | 2026-02-15 | 14:30:00 | 2026-01-06 10:31:22
3 | 渡辺修 | 2026-02-16 | 11:00:00 | 2026-01-06 10:32:08
4 | 中村真理 | 2026-02-17 | 15:00:00 | 2026-01-06 10:33:45
5 | 小林直樹 | 2026-02-18 | 09:30:00 | 2026-01-06 10:34:12
5. その他の便利なデータ型
MySQLには、特定の用途に便利なデータ型も用意されています。代表的なものを紹介します。
ENUM型とSET型
ENUM型は、あらかじめ定義した選択肢の中から1つだけ値を選ぶ場合に使います。性別や会員ランクなど、限られた選択肢から選ぶ項目に最適です。
SET型は、複数の選択肢から複数の値を選べます。趣味や資格など、複数選択可能な項目に使用します。
BOOLEAN型
BOOLEAN型は、真偽値を保存します。MySQLではTINYINT(1)として扱われ、TRUEが1、FALSEが0で保存されます。フラグや有効・無効の管理に便利です。
6. データ型選びで失敗しないための注意点
データ型を選ぶ際には、いくつかの重要なポイントがあります。適切なデータ型を選ぶことで、データベースのパフォーマンスが向上し、エラーも防げます。
データ型選びのチェックリスト
- 保存する値の範囲は十分か?年齢にBIGINTは無駄です。
- 文字列の最大長は適切か?短すぎるとエラーになります。
- 小数点以下の桁数は必要か?金額計算はDECIMAL型を使いましょう。
- 日付や時刻を文字列で保存していないか?専用の型を使うと便利です。
- 将来的にデータが増える可能性は?余裕を持たせることも大切です。
適切なデータ型を選ぶことで、データベースの容量を節約し、検索速度も向上します。例えば、性別を保存する場合、VARCHAR(50)よりもCHAR(1)やENUM型の方が効率的です。
また、数値として扱うデータは必ず数値型を使いましょう。電話番号や郵便番号は数値のように見えますが、先頭のゼロが必要な場合やハイフンを含む場合があるため、文字列型が適しています。