sql >> Base de Datos >  >> RDS >> Mysql

Spring Boot con Hibernate:esquema de base de datos de generación automática con columnas que pueden contener fracciones de segundos

MySql57Dialect (y/o MySql57InnoDbDialect , dependiendo de la versión de Hibernate), el TIMESTAMP El tipo de SQL ya está asignado a un TIMESTAMP(6) tipo de columna de la base de datos:

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

Esto significa que la definición de columna predeterminada debe admitir una precisión de microsegundos. El mejor curso de acción es dejar que Hibernate genere el esquema sin anular la definición de la columna. Para la mayoría de las demás bases de datos, se degradará con gracia a un simple TIMESTAMP .

Si desea cambiar a otra base de datos en el futuro que también admita precisión de microsegundos, busque el Dialect relevante; es probable que incluya soporte para la función y, de no ser así, siempre puede personalizarla.

Esto se debe a que en el registerColumnType llamada anterior, la precisión del TIMESTAMP se fija en 6. Si desea poder personalizarlo, implemente su propio dialecto personalizado (que se extiende desde MySql57Dialect ) y anule la definición con:

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

Luego podrá anular la longitud de la columna usando length , precision , o scale (dependiendo de lo que pongas dentro de los paréntesis). Tenga en cuenta que el segundo argumento del método define la longitud de columna máxima posible para este tipo de datos en particular, por lo que si desea, p. precisión de nanosegundos, debe cambiarlo a 9.