【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型と同じ動作をします。
あわせて読んでほしい!
コメント
2:夢見る男:2021/08/12 20:35:22
上記のように顔が見えないからといって相手のことを考えない発言は見ていて痛いですねw
確かに情報の信憑性は欠けると思いますが、こういう役に立つ情報はありがたいのです。
1:名無しさん:2020/01/16 23:05:53
VARCHAR(M)は255じゃねーよ。他にもいろいろ勘違いしてるみたいだし、プログラマー辞めたほうがいいと思うよ