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 TypeOracleMySQLPostgreSQLH2
Stringvarchar2(255 char)varchar(255)varchar(255)varchar(255)
booleannumber(1,0)bool bitbooleanbool
intnumber(10,0)integerint41integer
longnumber(19,0)bigintint8bigint
floatfloatfloatfloat4float
doubledouble precisiondouble precisionfloat8double
BigDecimalnumber(19,2)decimal(19,2)numeric(19,2)decimal(19,2)
LocalDatedatedatedatedate
LocalDateTimetimestampdatetime(6)timestamptimestamp
Timestamptimestampdatetime(6)timestamptimestamp

想定の用途

ざっくり把握する用。

  • 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導入におけるルールの選定