RDBMSのデータ型の比較

このページは、RDBMSのデータ型の違いについてまとめる予定のページです。

目次

注意

  • このページを作ったひとが自分のために記載しているため網羅性はありません。
  • 大文字小文字表記は各製品のドキュメントに準じています。(実際にはどちらの表記でも構いません)

一覧

整数

1バイト整数 (TINYINT)

RDBMS
MySQL TINYINT
PostgreSQL なし
Oracle なし
SQL Server tinyint
SQLite なし (TINYINTINTEGERのエイリアス)

2バイト整数 (SMALLINT)

RDBMS
MySQL SMALLINT
PostgreSQL smallint, int2
Oracle なし (SMALLINTNUMBER(38)のエイリアス)
SQL Server smallint
SQLite なし (TINYINTINTEGERのエイリアス)

4バイト整数 (INTEGER)

RDBMS
MySQL INTEGER, INT
PostgreSQL integer, int, int4
Oracle なし (INTEGER, INTNUMBER(38)のエイリアス)
SQL Server integer, int
SQLite なし (INTEGER, INTは値に応じて8バイトの範囲まで格納される)

8バイト整数 (BIGINT)

RDBMS
MySQL BIGINT
PostgreSQL bigint, int8
Oracle なし (NUMBER(19) などにする)
SQL Server bigint
SQLite INTEGERが 8バイトまで対応できる。BIGINT も使用可 (INTEGER になる)

符号なし整数 (UNSIGNED)

RDBMS
MySQL UNSIGNED (INTEGER UNSIGNED など)
PostgreSQL なし (CHECK 制約を付与する)
Oracle
SQL Server
SQLite
CHECK 制約を付与する例
CREATE TABLE table1 (
  col1 INTEGER CHECK (col1 >= 0)
)

真数

RDBMS
MySQL NUMERIC(p, s), DECIMAL(p, s)
PostgreSQL numeric(p, s), decimal(p, s)
Oracle NUMBER(p, s), NUMERIC(p, s), DECIMAL(p, s)
SQL Server numeric(p, s), decimal(p, s)
SQLite なし (NUMERIC(p, s)は指定できるが精度指定は無視される)

概数

4バイト単精度 (REAL)

RDBMS
MySQL FLOAT, REAL (REAL_AS_FLOAT有効時)
PostgreSQL real, float(1)float(24)
Oracle FLOAT(63)
SQL Server REAL, FLOAT(1)FLOAT(24)
SQLite なし (REALが8バイトまで対応)

8バイト倍精度 (DOUBLE PRECISION)

RDBMS
MySQL DOUBLE PRECISION, DOUBLE, REAL (REAL_AS_FLOAT無効時)
PostgreSQL double precision, float(25)float(53)
Oracle FLOAT(126)
SQL Server DOUBLE PRECISION, FLOAT(25)FLOAT(53)
SQLite REALが8バイトまで対応。DOUBLE PRECISION, DOUBLE, FLOAT

可変文字列

RDBMS
MySQL VARCHAR(n), CHARACTER VARYING(n) (n = 文字数)
PostgreSQL varchar(n), character varying(n) (n = 文字数)
Oracle VARCHAR2(n) (CHARACTER VARYING(n), VARCHAR2(n BYTE), VARCHAR2(n CHAR)), NVARCHAR2(n)
(n = VARCHAR2(n) CHARACTER VARYING(n) VARCHAR2(n BYTE)の場合バイト、その他は文字数)
SQL Server varchar(n) (n = バイト数), nvarchar(n) (n = バイトペア数)
SQLite TEXT (VARCHAR(n)も使用可。桁数指定は無視される)

日付

RDBMS
MySQL DATE
PostgreSQL date
Oracle DATE (時刻も扱う)
SQL Server date
SQLite なし (DATEなどは指定できるが数値や文字列を格納できる)

日時

RDBMS
MySQL DATETIME, TIMESTAMP
PostgreSQL timestamp (timestamp without time zone), timestamp with time zone
Oracle TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE
SQL Server datetime2, datetimeoffset
SQLite なし
  • 補足
    • 推奨されていない型は掲載していません。(SQL Serverのsmalldatetimeなど)
    • MySQLのTIMESTAMPは他の製品や標準SQLの型と挙動が異なります (範囲が1970-01-01 00:00:01~2038-01-19 03:14:07など)

可変長バイナリ (BLOB)

RDBMS
MySQL BLOB
PostgreSQL bytea
Oracle BLOB
SQL Server varbinary(max)
SQLite BLOB

JSON

RDBMS
MySQL JSON
PostgreSQL json, jsonb
Oracle JSON (21c~)
SQL Server なし (nvarcharなどに保存可能)
SQLite なし (TEXTに保存可能)

参考