MySQL のデータ型

August 03, 2018

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)  

 © 2023, Dealing with Ambiguity