MySQLが扱えるデータ型(一部)
整数
- TINYINT ⇒ -128 ~ +127
- INT ⇒ -21億 ~ +21億
- BIGINT ⇒ -922京 ~ +922京
マイナスの値を扱うことがない場合は、データ型にUNSIGNED
キーワードを付けてあげることによってプラスの値しか扱わずなおかつ、扱える数字の幅が広くなる。
例
TINYINT UNSIGNED ⇒ 0 ~ 255
実数
- DECIMAL ⇒ 固定小数点
- FLOAT ⇒ 浮動小数点
- DOUBLE ⇒ 浮動小数点(高精度)
文字列
-
CHAR ⇒ 0 ~ 255文字(主に商品コードなど固定長のデータに使用)
-
VARCHAR ⇒ 0 ~ 65535文字(文字数がバラバラになるようなデータに使用)
-
TEXT ⇒ 65535文字以上(VARCHARよりも長くなるようなデータに使用)
-
ENUM ⇒ 特定の文字列の内、1つだけの値を格納したいときに使用
CREATE TABLE posts ( greeting ENUM("Hello", "Bye", "Hey") ); INSERT INTO posts (greeting) VALUES ("Hello"), ("Bye"), ("Hey");
ちなみに、インデックス番号を指定しても値の取り出しは可能
CREATE TABLE posts (
greeting ENUM("Hello", "Bye", "Hey")
);
-- インデックス番号でも取り出せる
INSERT INTO posts (greeting) VALUES
(1),
(2),
(3);
-
SET ⇒ 特定の文字列の内、複数の値を格納したいときに使用
CREATE TABLE posts ( greetings SET("Hello", "Bye", "Hey") ); INSERT INTO posts (greetings) VALUES ("Hello,Bye"), ("Hey"), ("Hey,Hello");
わかりやすいようにフィールド名を複数形に
データを挿入する際、,
以外に空白などを入れてはいけないので注意
SET型は内部的に値を数値で管理していて、その数値を利用して値を取り出せる
CREATE TABLE posts (
greetings SET("Hello", "Bye", "Hey") -- 左から2の0乗,2の1乗,2の2乗...
);
-- INSERT INTO posts (greetings) VALUES
-- ("Hello,Bye"),
-- ("Hey"),
-- ("Hey,Hello");
-- 2つ並んだ値はそれぞれが持つ内部数字を足す
INSERT INTO posts (greetings) VALUES
(3),
(4),
(5);
真偽値
-
BOOL ⇒ TRUE / FALSE(1がTRUE、0がFALSEで表される)
CREATE TABLE posts ( boolean BOOL ); INSERT INTO posts (boolean) VALUES (TRUE), (FALSE), (0);
日時
-
DATE ⇒「日付」を扱いたいときに使用
-
TIME ⇒「時間」を扱いたいときに使用
-
DATETIME ⇒「日時」を扱いたいときに使用
CREATE TABLE posts ( created DATETIME ); INSERT INTO posts (created) VALUES ("2020-11-11 12:22:03"), ("2020-03-03"), (NOW());
終わりに
ここで紹介したデータ型はごく一部です。
データ型はまだまだたくさんあります。
MySQLを勉強する中で、わかりやすくまとまっているなーと思うサイトを見つけたので、こちらもぜひ見てみてください。
-
2020/10/16 追記を追加しました。
独学中に見たことがなかったSERIALなるものと遭遇したので、備忘録の意味も込めて追記しました。
追記
SERIAL
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
の別名。
実装例
mysql> create table serial
-> (
-> id SERIAL
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> desc serial;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
+-------+---------------------+------+-----+---------+----------------+
上記のようにfield名にSERIAL
を付けると、データ型、NOT NULL、PRIMARY KEY、AUTO_INCREMENTの設定をやってくれる。