よく使うMySQLのデータ型をまとめた

主なデータ型だけ記述してます。使う予定のない列挙型やバイナリ型などは省略した自分用メモです。

1. 数値型

 型   最小値   最大値   サイズ 
TINYINT -128 127 1Byte
TINYINT UNSIGNED 0 255 1Byte
SMALLINT -32768 32767 2Byte
SMALLINT UNSIGNED 0 65535 2Byte
MEDIUMINT -8388608 8388607 3Byte
MEDIUMINT UNSIGNED 0 16777215 3Byte
INT -2147483648 2147483647 4Byte
INT UNSIGNED 0 4294967295 4Byte
BIGINT -9223372036854775808 9223372036854775807 8Byte
BIGINT UNSIGNED 0 18446744073709551615 8Byte
FLOAT(精度,位取り)
*1
-3.402823466E+38 3.402823466E+38 4Byte
DOUBLE(精度,位取り)
REAL(精度,位取り)
*1
-1.7976931348623157E+308 1.7976931348623157E+308 8Byte
DECIMAL(精度[,位取り])
DEC(精度[,位取り])
NUMERIC(精度[,位取り])
*1

(位取り省略時は0)
位取り > 0:
精度+2Byte

位取り = 0:
精度+1Byte

*1 例)「1234.56」→「精度6、位取り2」

2. 文字列型

 型   説明 
CHAR(n)
CHARACTER(n)
固定長文字列
最大255文字まで
格納される文字が指定サイズより小さい場合は右スペース埋めされる。
CHAR CHAR(1)と等価
VARCHAR(n) 可変長文字列
最大65535Byte (64KB)
TINYTEXT *1 可変長文字列
最大255Byte
TEXT *1 可変長文字列
最大65535Byte (64KB)
MEDIUMTEXT *1 可変長文字列
最大16777215Byte (16MB)
LONGTEXT *1 可変長文字列
最大4294967295Byte (4GB)

*1 TEXT型にインデックスを設定する場合は長さの指定が必要になる。

CREATE TABLE fuga_tbl (uho_col TEXT);
CREATE INDEX hoge_idx ON fuga_tbl (uho_col(10));

3. 日付/時刻型

 型   属性   説明   サイズ 
DATE 日付 範囲:
 BC4713 ~ AD32767
入力形式:
 ‘YYYY-MM-DD’,
 ‘YYYY/MM/DD’,
 ‘YYYYMMDD’
4Byte
DATETIME 日時 範囲:
 ‘1000-01-01 00:00:00’ ~ ‘9999-12-31 23:59:59’
入力形式:
 ‘YYYY-MM-DD HH:MM:SS’,
 ‘YYYY/MM/DD HH:MM:SS’,
 ‘YYYYMMDDHHMMSS’
8Byte
TIMESTAMP 日時 範囲:
 ‘1970-01-01 00:00:00’ ~ ‘2037-12-31 23:59:59’
入力形式:
 DATETIMEと同じ

・範囲が2037年末までなので新規案件では使用しない。
・最初のTIMESTAMP型カラムには"CURRENT TIMESTAMP ON UPDATE CURRENT TIMESTAMP"が設定される。
・他にも癖があるので特に理由がなければDATETIMEを使用する。
4Byte
TIME 時刻 時刻範囲:
 ‘-838:59:59’ ~ ‘838:59:59’
入力形式:
 ‘HH:MM:SS’, ‘HHMMSS’,
 ‘HH:MM’, ‘HHMM’,
 ‘D HH:MM:SS’, ‘D HHMMSS’,
 ‘D HH:MM’, ‘D HHMM’,
 (Dは日付 0 〜 33)
3Byte
YEAR[(4/2)] 範囲:
 ‘1901’ ~ ‘2155’(4桁形式), ‘1970’ ~ ‘2069’(2桁形式)
入力形式:
 ‘YYYY’(4桁形式), ‘YY’(2桁形式)
1Byte

4. ビット型

 型   説明 
BIT(n) n bitの固定長bit列
nは1〜64
BIT BIT(1)と等価
BOOL TINYINT(1)と等価
BOOLEAN TINYINT(1)と等価

5. 参考

https://dev.mysql.com/doc/refman/8.0/ja/data-types.html