sql >> データベース >  >> RDS >> Mysql

Hibernateを使用したSpringBoot:数分の1秒を保持できる列を含むデータベーススキーマの自動生成

    MySql57Dialect (および/または MySql57InnoDbDialect 、Hibernateのバージョンに応じて)、 TIMESTAMP SQLタイプはすでにTIMESTAMP(6)にマップされています データベースの列タイプ:

    registerColumnType( Types.TIMESTAMP, "datetime(6)" );
    

    これは、デフォルトの列定義がマイクロ秒の精度をサポートする必要があることを意味します。最善の行動は、列定義をオーバーライドせずにHibernateにスキーマを生成させることです。他のほとんどのデータベースでは、単純な TIMESTAMPに正常に劣化します。 。

    将来、マイクロ秒の精度もサポートする別のデータベースに切り替える場合は、関連する Dialectを検索してください。;機能のサポートが含まれている可能性があり、含まれていない場合はいつでもカスタマイズできます。

    これは、 registerColumnTypeにあるためです 上記の呼び出し、 TIMESTAMPの精度 は6に修正されています。カスタマイズできるようにする場合は、独自のカスタム方言を展開します( MySql57Dialect から拡張) )そして定義を次のようにオーバーライドします:

    registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
    

    その後、 lengthのいずれかを使用して列の長さをオーバーライドできます。 、精度 、または scale (角かっこ内に何を入れるかによって異なります)。メソッドの2番目の引数は、この特定のデータ型の可能な最大列長を定義することに注意してください。ナノ秒の精度、9に変更する必要があります。




    1. SQL Server(T-SQL)で既存のテーブルの圧縮を有効にする方法

    2. NaviCatMySQLクライアントを使用してデータベースに接続する方法

    3. SQL Server 2012 ServicePack1および累積的な更新プログラム1

    4. SQLAlchemyとAlembicを使用して、データベースにテーブル列が存在するかどうかを確認します