Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Spring Boot com Hibernate:Esquema de banco de dados de geração automática com colunas que podem conter frações de segundos


MySql57Dialect (e/ou MySql57InnoDbDialect , dependendo da versão do Hibernate), o TIMESTAMP O tipo SQL já está mapeado para um TIMESTAMP(6) tipo de coluna do banco de dados:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );

Isso significa que a definição de coluna padrão deve dar suporte à precisão de microssegundos. O melhor curso de ação é deixar o Hibernate gerar o esquema sem substituir a definição da coluna. Para a maioria dos outros bancos de dados, ele será degradado normalmente para um simples TIMESTAMP .

Se você quiser mudar para outro banco de dados no futuro que também suporte a precisão de microssegundos, procure o Dialect relevante; provavelmente incluirá suporte para o recurso e, caso contrário, você sempre poderá personalizá-lo.

Isso ocorre porque no registerColumnType chamada acima, a precisão do TIMESTAMP é fixado em 6. Se você quiser personalizá-lo, implemente seu próprio dialeto personalizado (estendendo-se de MySql57Dialect ) e substitua a definição por:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale

Você poderá então substituir o comprimento da coluna usando length , precision , ou scale (dependendo do que você colocar dentro dos colchetes). Observe que o segundo argumento para o método define o comprimento máximo de coluna possível para esse tipo de dados específico, portanto, se você quiser, por exemplo, precisão de nanossegundos, você deve alterá-la para 9.