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はここに書いてあるものが全てではない

  1. Primary Key指定だとserialになる ↩︎

関連記事


  1. Spring Data JPAのEntityクラスからDDLを生成する
  2. データベースを参照してシステム連携する際に気をつけること
  3. Oracle 11でSELECT文の実行結果をCSV/TSV出力する
  4. JavaサーブレットでSQLiteを使う場合のパス指定方法
  5. アノテーションを活用した影響調査にトライしてみた
  6. Groovyの == 演算子と equals() は厳密に同じではない
  7. 既存コードへのCheckstyle導入におけるルールの選定

comments powered by Disqus