バナー画像

MySQLのデータ型についてまとめています。

以下、MySQL8.0.19を前提に解説しています。また、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。

MySQLのデータ型の一覧

MySQLには、数値型、日付・時間型、文字列型のデータ型があります。

参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 11 データ型

数値型

日付・時間型の一覧

文字列型の一覧

テーブルカラムのデータ型確認はshow columns

カラムのデータ型を確認するshow columnsの構文は以下の通りです。

show columns from テーブル名

employees(社員テーブル)のカラムのデータ型を確認してみましょう。

mysql> show columns from employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+

like を使って、ワイルドカードによるテーブル指定も可能です。長いテーブル名を間違えずに打ち込むのが大変なときなどに、役立ちます。

mysql> show columns from employees like 'emp%';
+--------+------+------+-----+---------+-------+
| Field  | Type | Null | Key | Default | Extra |
+--------+------+------+-----+---------+-------+
| emp_no | int  | NO   | PRI | NULL    |       |
+--------+------+------+-----+---------+-------+

desc テーブル名でも、全く同様の出力になります。短くてタイプが楽ですが、likeによるワイルドカード指定はできません。

また、mysqlshowコマンドでも、カラムのデータ型の確認が可能です。

【関連記事】
MySQLのデータベース一覧確認は、show databasesよりmysqlshowが便利

データ型の変更は、alter table

データ型の変更をおこなうSQLの構文は以下の通りです。

ALTER TABLE テーブル名 MODIFY カラム名 データ型

変更前のテーブルemployees(社員テーブル)の各カラムのデータ型は以下の通りです。

mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(50)   | YES  |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+

last_name(姓名の姓)のデータ型をvarchar(16)から、vachar(50)に変更してみましょう。

NOT NULL制約が設定されているカラムに対してデータ型の変更を行うと、NOT NULL制約が解除されます。

mysql> alter table employees modify last_name varchar(50);
Query OK, 0 rows affected (2.90 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(50)   | YES  |     | NULL    |       |
| last_name  | varchar(50)   | YES  |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+

last_nameの「Null」の項目がNOからYESに変化しているのが確認できます。

以下のように指定すると、NOT NULL制約を設定したままデータ型を変更可能です。

mysql> alter table employees modify last_name varchar(50) not null;
Query OK, 0 rows affected (2.91 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(50)   | YES  |     | NULL    |       |
| last_name  | varchar(50)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+

なお、外部キー(foreign key)として設定されているカラムは、データ型の変更ができません。いったん外部キーを解除してから、変更を行いましょう。

mysql> alter table employees modify emp_no varchar(10);
ERROR 3780 (HY000): Referencing column 'emp_no' and referenced column 'emp_no' in foreign key constraint 'dept_emp_ibfk_1' are incompatible.

まとめ

ポテパンダの一言メモ
  • MySQLのデータ型は、大別すると数値型、日付・時刻型、文字列型の3種類。
  • データ型を確認するには、show columns(SQL)や、mysqlshowコマンドを使う
  • データ型変更は、alter tableで可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。