早見表

データ型マッピング早見表

整数・日時・UUID・ジオまで、主要カテゴリの型名を 5 RDBMS で横断対応付け。

この早見表の使い方

行は「論理的なカテゴリ」、列は 5 RDBMS(PostgreSQL / MySQL / SQLite / SQL Server / Oracle)です。同じ概念でも推奨される型名や記法が異なります。スキーマの移植や、複数 RDBMS を横断して開発するときの対応表として参照してください。型の選び方そのものは データ型の基本 を、型選びの実務的なコツは 型選択ガイド を参照してください。

数値(整数・固定小数・浮動小数)

カテゴリPostgreSQLMySQLSQLiteSQL ServerOracle
小整数(1〜2B)SMALLINTTINYINT / SMALLINTINTEGER(動的 1〜8B)TINYINT(0〜255) / SMALLINTNUMBER(3) / NUMBER(5)
整数(4B)INTEGERINT / INTEGERINTEGERINTNUMBER(10) / INTEGER
大整数(8B)BIGINTBIGINTINTEGERBIGINTNUMBER(19)
固定小数(金額等)NUMERIC(p,s) / DECIMALDECIMAL(p,s) / NUMERICNUMERIC(REAL 格納)DECIMAL(p,s) / NUMERICNUMBER(p,s)
浮動小数(単精度)REALFLOATREALREALBINARY_FLOAT
浮動小数(倍精度)DOUBLE PRECISIONDOUBLEREAL(8B)FLOAT(53bit)BINARY_DOUBLE

文字列

カテゴリPostgreSQLMySQLSQLiteSQL ServerOracle
可変長文字列(短〜中)VARCHAR(n) / TEXT(長さ無制限)VARCHAR(n)TEXTVARCHAR(n) / NVARCHAR(n)(Unicode)VARCHAR2(n)
可変長文字列(大)TEXTTEXT / MEDIUMTEXT / LONGTEXTTEXTVARCHAR(MAX) / NVARCHAR(MAX)CLOB / NCLOB
固定長文字列CHAR(n)CHAR(n)TEXT(実質可変)CHAR(n) / NCHAR(n)CHAR(n)

日付・時刻

カテゴリPostgreSQLMySQLSQLiteSQL ServerOracle
日付(年月日)DATEDATETEXT(YYYY-MM-DD)DATEDATE(時刻成分も保持)
時刻(時分秒)TIMETIMETEXTTIMEなし(TIMESTAMP で代用)
日時(TZ なし)TIMESTAMPDATETIMETEXT / INTEGER(UNIX 時刻)DATETIME2TIMESTAMP
日時(TZ あり)TIMESTAMPTZなし(UTC 保存が定石)なし(TEXT で)DATETIMEOFFSETTIMESTAMP WITH TIME ZONE

真偽・バイナリ・JSON・UUID・自動採番

カテゴリPostgreSQLMySQLSQLiteSQL ServerOracle
真偽BOOLEAN(ネイティブ)TINYINT(1)BOOLEAN はエイリアス)INTEGER の 0/1BITなし(NUMBER(1) + CHECK)
バイナリBYTEABLOB / VARBINARY(n)BLOBVARBINARY(n) / VARBINARY(MAX)BLOB / RAW(n)
JSONJSONB(推奨) / JSONJSONTEXT + json 関数NVARCHAR(MAX) + JSON 関数JSON(21c+) / CLOB + IS JSON(12c+)
UUIDUUID(ネイティブ)CHAR(36) / BINARY(16)TEXT / BLOBUNIQUEIDENTIFIERRAW(16) + SYS_GUID()
自動採番の主キーSERIAL / GENERATED ALWAYS AS IDENTITYINT AUTO_INCREMENTINTEGER PRIMARY KEYINT IDENTITY(1,1)GENERATED ALWAYS AS IDENTITY(12c+)

空間(ジオ)データ

地図・位置情報を扱うための空間データ型は、RDBMS ごとにネイティブ対応と拡張対応が分かれます。距離計算や範囲検索、空間インデックス(R-Tree / GiST 等)のサポート状況も大きく異なるため、要件が出た時点でエンジンを選定するくらいの重要さがあります。

カテゴリPostgreSQLMySQLSQLiteSQL ServerOracle
点(位置)POINT(組込) / geometry(Point)(PostGIS)POINTTEXT(SpatiaLite で POINTgeometry / geography(Point)SDO_GEOMETRY(Oracle Spatial)
ポリゴン / 経路POLYGON / LINESTRING(PostGIS)POLYGON / LINESTRINGSpatiaLite 拡張geometry(Polygon) / geographySDO_GEOMETRY
測地系(地球座標)PostGIS geography(球面距離)SRID 4326 指定の geometrySpatiaLite 拡張geography 型(球面演算)SDO_GEOMETRY(SRID 指定)
空間インデックスGiST / SP-GiST(PostGIS)SPATIAL INDEX(R-Tree)R*Tree モジュール空間インデックス(grid tessellation)R-Tree Spatial Index
代表的な関数ST_Distance / ST_WithinST_Distance / ST_ContainsST_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 パッケージで根本的に記法が違う

関連トピック