DDLを自動生成してJavaと各DBのデータ型を比較してみた
DBはあまり詳しくないので、各DBでいろんなデータ型があって混乱することがあります。
またテストでH2を使うときにも「データ型の表記や互換性ってどうなんだろう」と気になったりします。
そこで、そういったときのために対応表を作ることにしました。
作ったもの
「HibernateのDialectを指定してDDLを生成した場合、Javaの型がどのような型に対応付けられるか」の対応表。
Hibernateなので、そこまで変な型にマッピングしているわけではないだろうなーという考え。
DDLの生成方法はSpring Data JPAのEntityクラスからDDLを生成するにて。
DBバージョン
比較するDDLを生成する際に使用したDialectは以下の通り。
- Oracle10gDialect
- MySQL57InnoDBDialect
- PostgreSQL9Dialect
- H2Dialect
したがって、DBバージョンとしては以下に相当する(はず)。
- Oracle 10g
- MySQL 5.7(InnoDB)
- PostgreSQL 9
- H2
対応表(Java Data Type→DB Data Type)
表の左に書かれているJava Typeについて、DDLを自動生成した場合には右側に記載のデータ型が使用されたことを示す。
Java Type | Oracle | MySQL | PostgreSQL | H2 |
---|---|---|---|---|
String | varchar2(255 char) | varchar(255) | varchar(255) | varchar(255) |
boolean | number(1,0) | bool bit | boolean | bool |
int | number(10,0) | integer | int41 | integer |
long | number(19,0) | bigint | int8 | bigint |
float | float | float | float4 | float |
double | double precision | double precision | float8 | double |
BigDecimal | number(19,2) | decimal(19,2) | numeric(19,2) | decimal(19,2) |
LocalDate | date | date | date | date |
LocalDateTime | timestamp | datetime(6) | timestamp | timestamp |
Timestamp | timestamp | datetime(6) | timestamp | timestamp |
想定の用途
ざっくり把握する用。
- DBにあまり詳しくない人が、ざっくり知りたい時
- DB移行のときに、どの型がどの型に対応しそうか、という調査の足がかりに
想定外の用途
この表を過信すること。
- DBのバージョン差異もありえるので、かならず裏をとること
- H2はここに書いてあるものが全てではない
- H2はかなり幅広い表記ができるので、公式ドキュメントも見ること
-
Primary Key指定だと
serial
になる ↩︎