Mysql
 sql >> Base de données >  >> RDS >> Mysql

Spring Boot avec Hibernate :schéma de base de données à génération automatique avec des colonnes pouvant contenir des fractions de secondes

MySql57Dialect (et/ou MySql57InnoDbDialect , selon la version d'Hibernate), le TIMESTAMP Le type SQL est déjà mappé à un TIMESTAMP(6) type de colonne de base de données :

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

Cela signifie que la définition de colonne par défaut doit prendre en charge la précision à la microseconde. La meilleure solution consiste à laisser Hibernate générer le schéma sans remplacer la définition de la colonne. Pour la plupart des autres bases de données, il se dégradera gracieusement en un simple TIMESTAMP .

Si vous souhaitez passer ultérieurement à une autre base de données prenant également en charge la précision à la microseconde, recherchez le Dialect correspondant.; il inclura probablement la prise en charge de la fonctionnalité, et si ce n'est pas le cas, vous pouvez toujours la personnaliser.

C'est parce que dans le registerColumnType call ci-dessus, la précision du TIMESTAMP est fixé à 6. Si vous souhaitez pouvoir le personnaliser, déployez votre propre dialecte personnalisé (s'étendant de MySql57Dialect ) et remplacez la définition par :

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

Vous pourrez alors remplacer la longueur de la colonne en utilisant soit length , precision , ou scale (selon ce que vous mettez entre parenthèses). Notez que le deuxième argument de la méthode définit la longueur de colonne maximale possible pour ce type de données particulier, donc si vous voulez par ex. précision nanoseconde, vous devriez le changer en 9.