早見表
データ型マッピング早見表
整数・日時・UUID・ジオまで、主要カテゴリの型名を 5 RDBMS で横断対応付け。
この早見表の使い方
数値(整数・固定小数・浮動小数)
| カテゴリ | PostgreSQL | MySQL | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|
| 小整数(1〜2B) | SMALLINT | TINYINT / SMALLINT | INTEGER(動的 1〜8B) | TINYINT(0〜255) / SMALLINT | NUMBER(3) / NUMBER(5) |
| 整数(4B) | INTEGER | INT / INTEGER | INTEGER | INT | NUMBER(10) / INTEGER |
| 大整数(8B) | BIGINT | BIGINT | INTEGER | BIGINT | NUMBER(19) |
| 固定小数(金額等) | NUMERIC(p,s) / DECIMAL | DECIMAL(p,s) / NUMERIC | NUMERIC(REAL 格納) | DECIMAL(p,s) / NUMERIC | NUMBER(p,s) |
| 浮動小数(単精度) | REAL | FLOAT | REAL | REAL | BINARY_FLOAT |
| 浮動小数(倍精度) | DOUBLE PRECISION | DOUBLE | REAL(8B) | FLOAT(53bit) | BINARY_DOUBLE |
文字列
| カテゴリ | PostgreSQL | MySQL | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|
| 可変長文字列(短〜中) | VARCHAR(n) / TEXT(長さ無制限) | VARCHAR(n) | TEXT | VARCHAR(n) / NVARCHAR(n)(Unicode) | VARCHAR2(n) |
| 可変長文字列(大) | TEXT | TEXT / MEDIUMTEXT / LONGTEXT | TEXT | VARCHAR(MAX) / NVARCHAR(MAX) | CLOB / NCLOB |
| 固定長文字列 | CHAR(n) | CHAR(n) | TEXT(実質可変) | CHAR(n) / NCHAR(n) | CHAR(n) |
日付・時刻
| カテゴリ | PostgreSQL | MySQL | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|
| 日付(年月日) | DATE | DATE | TEXT(YYYY-MM-DD) | DATE | DATE(時刻成分も保持) |
| 時刻(時分秒) | TIME | TIME | TEXT | TIME | なし(TIMESTAMP で代用) |
| 日時(TZ なし) | TIMESTAMP | DATETIME | TEXT / INTEGER(UNIX 時刻) | DATETIME2 | TIMESTAMP |
| 日時(TZ あり) | TIMESTAMPTZ | なし(UTC 保存が定石) | なし(TEXT で) | DATETIMEOFFSET | TIMESTAMP WITH TIME ZONE |
真偽・バイナリ・JSON・UUID・自動採番
| カテゴリ | PostgreSQL | MySQL | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|
| 真偽 | BOOLEAN(ネイティブ) | TINYINT(1)(BOOLEAN はエイリアス) | INTEGER の 0/1 | BIT | なし(NUMBER(1) + CHECK) |
| バイナリ | BYTEA | BLOB / VARBINARY(n) | BLOB | VARBINARY(n) / VARBINARY(MAX) | BLOB / RAW(n) |
| JSON | JSONB(推奨) / JSON | JSON | TEXT + json 関数 | NVARCHAR(MAX) + JSON 関数 | JSON(21c+) / CLOB + IS JSON(12c+) |
| UUID | UUID(ネイティブ) | CHAR(36) / BINARY(16) | TEXT / BLOB | UNIQUEIDENTIFIER | RAW(16) + SYS_GUID() |
| 自動採番の主キー | SERIAL / GENERATED ALWAYS AS IDENTITY | INT AUTO_INCREMENT | INTEGER PRIMARY KEY | INT IDENTITY(1,1) | GENERATED ALWAYS AS IDENTITY(12c+) |
空間(ジオ)データ
地図・位置情報を扱うための空間データ型は、RDBMS ごとにネイティブ対応と拡張対応が分かれます。距離計算や範囲検索、空間インデックス(R-Tree / GiST 等)のサポート状況も大きく異なるため、要件が出た時点でエンジンを選定するくらいの重要さがあります。
| カテゴリ | PostgreSQL | MySQL | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|
| 点(位置) | POINT(組込) / geometry(Point)(PostGIS) | POINT | TEXT(SpatiaLite で POINT) | geometry / geography(Point) | SDO_GEOMETRY(Oracle Spatial) |
| ポリゴン / 経路 | POLYGON / LINESTRING(PostGIS) | POLYGON / LINESTRING | SpatiaLite 拡張 | geometry(Polygon) / geography | SDO_GEOMETRY |
| 測地系(地球座標) | PostGIS geography(球面距離) | SRID 4326 指定の geometry | SpatiaLite 拡張 | geography 型(球面演算) | SDO_GEOMETRY(SRID 指定) |
| 空間インデックス | GiST / SP-GiST(PostGIS) | SPATIAL INDEX(R-Tree) | R*Tree モジュール | 空間インデックス(grid tessellation) | R-Tree Spatial Index |
| 代表的な関数 | ST_Distance / ST_Within | ST_Distance / ST_Contains | ST_Distance(SpatiaLite) | .STDistance() / .STIntersects() | SDO_GEOM.SDO_DISTANCE |
移植時の注意
- BOOLEAN のない RDBMS: Oracle にはネイティブ BOOLEAN 型がなく(23c で追加)、
NUMBER(1)+CHECK (col IN (0,1))が慣例。移植時は 0/1 ↔ true/false の変換レイヤを挟むと事故が減る - SQLite の型アフィニティ: 宣言した型と異なる値も格納できてしまう。厳密にしたいなら
STRICTテーブル(3.37+)を使う - Oracle の DATE: 年月日だけでなく時刻成分も常に保持する。他 RDBMS の
DATE(年月日のみ)と混同しない - MySQL の TIMESTAMP と DATETIME:
TIMESTAMPは UTC で内部保存しセッション TZ で出力、DATETIMEは値そのまま。TZ 付き型が必要ならTIMESTAMPを選ぶ(ただし 2038 年問題あり) - ジオ型の方言: SQL/MM 標準関数(
ST_*)は PostgreSQL / MySQL / SQLite で使えるが、SQL Server は.STDistance()のメソッド呼び出し、Oracle はSDO_GEOMパッケージで根本的に記法が違う
