sql >> Databasteknik >  >> RDS >> Mysql

Spring Boot with Hibernate:Automatiskt genererande databasschema med kolumner som kan hålla bråkdelar av sekunder

MySql57Dialect (och/eller MySql57InnoDbDialect , beroende på versionen av Hibernate), TIMESTAMP SQL-typen är redan mappad till en TIMESTAMP(6) databas kolumntyp:

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

Detta innebär att standardkolumndefinitionen bör stödja mikrosekundprecision. Det bästa tillvägagångssättet är att låta Hibernate generera schemat utan att åsidosätta kolumndefinitionen. För de flesta andra databaser kommer den att försämras till en enkel TIMESTAMP .

Om du vill byta till en annan databas i framtiden som också stöder mikrosekundprecision, leta upp den relevanta Dialect; det kommer troligen att innehålla stöd för funktionen, och om inte kan du alltid anpassa den.

Detta beror på att i registerColumnType anropet ovan, precisionen för TIMESTAMP är fast vid 6. Om du vill kunna anpassa den, rulla ut din egen anpassade dialekt (som sträcker sig från MySql57Dialect ) och åsidosätt definitionen med:

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

Du kommer då att kunna åsidosätta kolumnlängden med antingen length , precision eller scale (beroende på vad du sätter innanför fästena). Observera att det andra argumentet till metoden definierar den maximala möjliga kolumnlängden för just denna datatyp, så om du vill t.ex. nanosekunders precision bör du ändra den till 9.




  1. Hur man går med i första raden

  2. Ansluter till SQL Server 2012 med sqlalchemy och pyodbc

  3. Bästa praxis för paginering i Oracle?

  4. Vilken längd måste jag ange för sträng krypterad med AES-256-CBC i databasen?