MySQL におけるデータ型について
データ型には、整数を扱う INT や、文字列を扱う VARCHAR 、日付と時刻を扱う DATETIME など、さまざまなものがあるが、大まかに「数値」「日付と時刻」「文字列」「その他」に分けられる。
ここでは MySQL におけるデータ型について記載する。
数値を扱うデータ型
扱う対象 |
型の種類 |
特徴 |
整数 |
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 等 |
整数を扱う型。小数点以下の数字は入力できない。正の数のみ扱うか、正負両方扱うかは設定で決める。扱える数字の範囲は決められている。 |
浮動小数 |
FLOAT, DOUBLE |
小数まで扱う型。入力した数字の桁数によって、自動的に小数点以下の数字を何桁まで扱うか決める。 |
固定小数 |
DICIMAL, NUMERIC |
小数まで扱う型。設定時に、小数点以下の数字を何桁まで扱うかを決める。 |
ビット値 |
BIT |
指定されたビット数を格納する。 |
mysql> CREATE TABLE test.number (col1 MEDIUMINT, col2 FLOAT, col3 DECIMAL);
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO test.number (col1, col2, col3) VALUES (1, 2.3, 3.33);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SELECT * FROM test.number;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| 1 | 2.3 | 3 |
+------+------+------+
1 row in set (0.01 sec)
日付と時刻を扱うデータ型
扱う対象 |
型の種類 |
特徴 |
日付 |
DATE |
日付を格納する型 |
時刻 |
TIME |
時刻を格納する型 |
日付と時刻 |
DATETIME, TIMESTAMP |
日付と時刻の両方を格納する型 |
年 |
YEAR |
年だけを格納する型 |
mysql> CREATE TABLE data (col1 DATE, col2 TIME, col3 DATETIME, col4 YEAR);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO test.data (col1, col2, col3, col4) VALUES ('2017-09-12', '09:15:03', '2017-09-12 09:15:03', '2017');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM test.data;
+------------+----------+---------------------+------+
| col1 | col2 | col3 | col4 |
+------------+----------+---------------------+------+
| 2017-09-12 | 09:15:03 | 2017-09-12 09:15:03 | 2017 |
+------------+----------+---------------------+------+
1 row in set (0.00 sec)
文字列を扱うデータ型
扱う対象 |
型の種類 |
特徴 |
固定長の文字列 |
CHAR |
指定した長さの文字列を格納する型 |
可変長の文字列 |
VARCHAR, TEXT |
指定した長さ以下の可変長の文字列を格納する型 |
固定長のバイナリデータ |
BINARY |
指定した長さのバイナリデータを格納する型 |
可変長のバイナリデータ |
VARBINARY, BLOG |
指定した長さ以下のバイナリデータを格納する型 |
列挙 |
ENUM |
あらかじめ用意した選択肢の中から 1 つ選ぶ型 |
セット |
SET |
あらかじめ用意した選択肢の複数の組み合わせを選ぶ型 |
mysql> CREATE TABLE test.string (col1 VARCHAR(10), col2 VARBINARY(20), col3 ENUM('red', 'blue', 'yellow'), col4 SET('red', 'blue', 'yellow'));
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO test.string (col1, col2, col3, col4) VALUES ('abcd', 'abcd', 'red', 'blue,yellow');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM test.string;
+------+------+------+-------------+
| col1 | col2 | col3 | col4 |
+------+------+------+-------------+
| abcd | abcd | red | blue,yellow |
+------+------+------+-------------+
1 row in set (0.00 sec)
その他のデータ型
扱う対象 |
型の種類 |
特徴 |
空間データ |
GEOMETRY |
位置や座標、形状を格納する型 |
空間データ |
POINT |
座標を格納する型 |
空間データ |
LINESTRING |
線分を格納する型 |
空間データ |
POLYGON |
多角形を格納する型 |
mysql> CREATE TABLE test.others (col1 GEOMETRY);
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO test.others (col1) VALUES (GeomFromText('POINT(141.350857 43.067656)'));
Query OK, 1 row affected (0.01 sec)