Knowledge‎ > ‎

MySQLデータ型一覧


MySQLのデータ型についてのまとめです。よく使うであろう型だけ簡易にピックアップしました。より詳細な情報についてはMySQLデータ型一覧 (詳細)を参照してください。

数値型

中分類 型名 小分類 値の範囲
整数 INT 4バイト整数 符号ありの範囲:-2147483648~2147483647 (約21億)
符号なしの範囲:0~4294967295 (約43億)
事務計算用小数点数
※1
DECIMAL(M,D) 固定小数点数 M:1~65 ※3
D:0~30 かつ M ≧ D
科学演算用小数点数
※1
FLOAT 単精度浮動小数点数 符号ありの範囲:-3.402823466E+38~3.402823466E+38
符号なしの範囲:0~3.402823466E+38
DOUBLE 倍精度浮動小数点数 符号ありの範囲:-1.7976931348623157E+308~1.7976931348623157E+308
符号なしの範囲:0~1.7976931348623157E+308
その他 BOOL※2 真偽値 -128~127
※1. DECIMALは誤差が発生しないため、事務処理に適しています。ただし容量を使います。FLOAT, DOUBLEはコンピュータの世界でよく利用される2進浮動小数点数です。使い方によって誤差が発生することがあります。非常に大きな値もしくは非常に小さい値を扱う科学演算などで使用します。科学演算をするわけではなく、またこの型の意味もよく分からずFLOATやDOUBLEを使うのは絶対にやめましょう。あとで苦労します。小数点数を扱いたい場合には、特別な理由が無い限りDECIMALを使うようにしましょう
※2. MySQLにBOOL型は存在しません。BOOLで指定すると実際にはTINYINT(1)で定義されます。しかし利用者は意識しなくてもいいでしょう。
※3. 5.0.3~5.0.5は64。それ以前のバージョンではM:0 ~ 253 M ≧ D。

日時型

型名 小分類 値の範囲
DATE 日付型。年月日 1000-01-01' to '9999-12-31'
DATETIME 範囲の広い日時型 1000-01-01 00:00:00' to '9999-12-31 23:59:59'※
※ 5.6.4以降では、DATETIMEで最大6桁の「Fractional Seconds」つまり「秒の小数部」を付加できます。指定は「DATETIME(6)」などとします。「DATETIME」「DATETIME(0)」はどちらも「DATETIME」として定義されます。

文字列型

中分類 型名 小分類 引数の範囲 値の範囲
文字列型 CHAR(M) 固定長文字列 Mに指定するのは文字数。0~255 255文字以下
VARCHAR(M) 可変長文字列 Mに指定するのは文字数。
0~(65535÷文字エンコーディングの最大バイト数。
UTF-8の場合21845となる)
6万5534バイト(64KB)以下※1
TEXT テキスト型 6万5535バイト(64KB)以下※1
バイナリ型
※2
BLOB バイナリ・ラージ・オブジェクト
Binary Large OBject
6万5535バイト(64KB)以下
MEDIUMBLOB 1677万7215バイト(16MB)以下
LONGBLOB 42億9496万7295バイト(4GB)以下
※1. 文字列なのに64KBで収まらない場合には、MEDIUMTEXT(16MB)・LONGTEXT(4GB)もあります。しかし通常は使わないでしょう。
※2. バイナリ型にはBLOB以外にも、固定長バイナリ型としてBINARY、可変長バイナリ型としてVARBINARYがあります。バイナリ型を使うのはそのほとんどが画像や音声・動画やその他のファイルを保存するときでしょう。そのような情報を保存するために固定長を使用する意義が低いですし、上限値を定義することもほとんど意味が無いでしょう。そのため本ページではBINARYとVARBINARYを省略しています。

余談

MySQLのデータ型に関しては、公式ドキュメントがあまりまとまっておらずかつ英語でした。検索すると個人作成のブログなどでデータ型一覧やその説明は一応あるものの、
  • 間違いが目立ち信頼性が低い
  • 非常に古い情報
  • 重要な型が抜け落ちている
  • その他情報不足
など。例えばDECIMAL型の説明が一切ないとか、DECIMAL型を「アンパック浮動小数点数」としていたり(公式マニュアルでは明確に「Fixed-Point Types」としているので、固定小数点数と訳すべき)。…と、とにかく信頼できる情報が全くといっていいほど見つからなかったため、自分で作成することにしました。

2014/12/08