sql >> Databáze >  >> RDS >> Mysql

Spring Boot with Hibernate:Automatické generování databázového schématu se sloupci, které mohou obsahovat zlomky sekund

MySql57Dialect (a/nebo MySql57InnoDbDialect , v závislosti na verzi Hibernate), TIMESTAMP Typ SQL je již namapován na TIMESTAMP(6) typ sloupce databáze:

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

To znamená, že výchozí definice sloupce by měla podporovat mikrosekundovou přesnost. Nejlepším postupem je nechat Hibernate vygenerovat schéma bez přepsání definice sloupce. U většiny ostatních databází se elegantně sníží na jednoduchý TIMESTAMP .

Pokud budete chtít v budoucnu přejít na jinou databázi, která rovněž podporuje mikrosekundovou přesnost, vyhledejte příslušný Dialect; pravděpodobně bude zahrnovat podporu pro tuto funkci, a pokud ne, vždy si ji můžete přizpůsobit.

Je to proto, že v registerColumnType výše, přesnost TIMESTAMP je pevně stanovena na 6. Pokud si ji chcete přizpůsobit, zaveďte svůj vlastní dialekt (rozšiřující se z MySql57Dialect ) a přepište definici pomocí:

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

Poté budete moci přepsat délku sloupce pomocí buď length , precision nebo scale (podle toho, co vložíte do závorek). Všimněte si, že druhý argument metody definuje maximální možnou délku sloupce pro tento konkrétní datový typ, takže pokud chcete např. přesnost nanosekund, měli byste ji změnit na 9.




  1. Upozornění, když někdo nahraje video

  2. Osvědčené postupy pro efektivní ukládání hash md5 v mysql

  3. Při migraci na OpenJDK 11, která verze konektoru MySql je kompatibilní pro java 11?

  4. Mysql FROM_UNIXTIME jako UTC