【MySQL】データ型一覧

公開日:
更新日:
カテゴリー: MySQL

MySQLのテーブル作成時にフィールドを設定しますが、その時にデータ型も一緒に指定します。

ここではそのデータ型をまとめています。

データ型

データ型とは、フィールドにどのようなデータを格納するのかを示すものです。カラム型、フィールド型とも呼ばれます。

フィールドにデータ型を指定することで、データの格納や管理が効率的に行えるようになります。

数値型

整数や少数、浮動小数点数を格納するときに指定する型です。

数値型は、商品の価格や数量、整理番号などを管理するフィールドに用います。

型名 値の範囲 UNSIGNEDを付与した場合の範囲
TINYINT -128~+127 0~+255
SMALLINT -32768~+32767 0~+65535
MEDIUMINT -8388608~+8388607 0~+16777215
INT -2147483648~+2147483647 0~+4294967295
BIGINT -9223372036854775808~+9223372036854775807 0~+18446744073709551615
FLOAT(M.D) -3.402823466E+38 ~ -1.175494351E-38,
0,
1.175494351E-38 ~ 3.402823466E+38
負数は使用不可
DOUBLE(M.D) -1.7976931348623157E+308 ~ -2.2250738585072014E-308,
0,
2.2250738585072014E-308 ~ 1.7976931348623157E+308
負数は使用不可
DECIMAL(M.D) MとDで変化する なし(利用不可)

※「UNSIGNED」はデータ型に対して付与するもので、負の値の挿入を許可しない場合に用います。

※Mは表示幅、DはDecimalという意味で小数点以下の桁数を表します。マイナス記号も一文字としてカウントされます。

DECIMALの例

値の範囲
DECIMAL(4,1) -999.9 ~ +9999.9
DECIMAL(5,1) -9999.9 ~ +99999.9
DECIMAL(6,1) -99999.9 ~ +999999.9
DECIMAL(6,2) -9999.99 ~ +99999.99
DECIMAL(6,3) -999.999 ~ +9999.999

使い分け

整数のみしか格納しない場合は、TINYINT()、INT()、BIGINT()を使用します。

どれを使用するかは、格納するデータの大きさで決めます。

TINYINTについて

TINYINT()は、UNSINGEDを指定することで0~255というRGBカラーコードやIPアドレスに使用される範囲になりますので、これらのデータを格納するときはTINYINT()を指定するのがよいです。

注意

金額を格納するフィールドに整数のみしか格納できないINT()などの型を指定するときは注意が必要です。

日本円は一般的に小数点以下を使用しないので、INT()やBIGINT()を指定しがちですが、為替相場などでは「銭」の単位が使用されるからです。このような場合は浮動小数が格納できるFLOAT()、DOUBLE()、DECIMAL()などの型を指定します。

文字型

固定長の文字列の他、可変長の文字列、選択式の文字列、バイナリデータなどを格納できます。

一番多く使用されるのは、CHARとVARCHARです。

型名 値の範囲(バイト) 挿入に必要なサイズ
CHAR(M) 255 Mバイト
VARCHAR(M) 255 X+1バイト
TINYBLOB 255 X+1バイト
BLOB 65535 X+2バイト
MEDIUMBLOB 16777215 X+3バイト
LONGBLOB 4294967295 X+4バイト
TINYTEXT 255 X+1バイト
TEXT 65535 X+2バイト
MEDIUMTEXT 16777215 X+3バイト
LONGTEXT 4294967295 X+4バイト
ENUM("選択肢1","選択肢2",・・・) 65535 選択肢 1~2バイト
SET("選択肢1","選択肢2",・・・) 64選択肢 1/2/4/8バイト

使い分け

基本的には、VARCHAR型もしくはTEXT型を文字列の長さによって使い分ければよいと思います。

CHAR型とVARCHAR型の違い

CHAR型の場合、CHAR(10)とすると、それに「ABC」という文字列を挿入しても消費容量は10バイトとなります。

一方、VARCHAR型の場合、VARCHAR(10)とすると、それに「ABC」という文字列を挿入すると消費容量は3バイト(正確には4バイト)となります。

なお、MySQLでは、ひとつのテーブルにCHAR型とVARCHAR型を混同して使うことはできません。

詳しくはCHAR型とVARCHAR型の違いを参照して下さい。

TEXTとBLOBの違い

TEXT型は「あいうえお」を「あいうえお」という文字として格納しますが、BLOB型を指定すると「あいうえお」は「01000011101101」のような2進数のバイナリデータとして格納されます。

そのためBLOB型に文字データを格納すると検索などを行った場合に間違った結果が返ってくることがあります。

文字列ならTEXT型、画像などのバイナリデータならBLOB型を指定しましょう。

ENUM型とSET型の違い

オプションとして設定できる数にも違いがありますが、ENUMは選択肢からひとつしか選択できません。しかしSETは選択肢の最大数は少ないものの複数、選択することができます。

日付・時刻型

日付、時刻を格納するときに利用するデータ型です。

格納するデータに適したものを以下の5つの型から選択します。

型名 フォーマット 値の範囲
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-31
TIME HH:MM:SS -838:59:59 ~ 838:59:59
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
YEAR YYYY 1901 ~ 2155、そして 0000 (4桁の場合)
70  ~ 69 (2桁の場合、70は1970を表し69は2069を表す)
※デフォルトは4桁

MySQL4.1.0以降のTIMESTAMP型について

TIMESTAMPはMySQLのバージョンとSQLの実行モードによって動作が異なります。

MySQL4.1.0以降では、MaxDBと呼ばれるMySQL ABが買収した企業のDBが取り込まれています。

そのため、MySQL4.1.0以降のバージョン絵は、TIMESTAMP型はDATETIME型と同じ動作をします。

 

あわせて読んでほしい!

 

コメント

1:名無しさん:2020/01/16 23:05:53

VARCHAR(M)は255じゃねーよ。他にもいろいろ勘違いしてるみたいだし、プログラマー辞めたほうがいいと思うよ

2:夢見る男:2021/08/12 20:35:22

上記のように顔が見えないからといって相手のことを考えない発言は見ていて痛いですねw
確かに情報の信憑性は欠けると思いますが、こういう役に立つ情報はありがたいのです。

コメントフォーム
お名前
コメント