Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Không khớp giữa các giá trị DATETIME trong cơ sở dữ liệu H2 và MySQL được chèn từ Java / Kotlin

Có vẻ như cách khắc phục là đặt múi giờ UTC cho kết nối JDBC (thay vì JVM):

spring.jpa.properties.hibernate.jdbc.time_zone=UTC

và nó dựa vào việc sử dụng Instant để giữ giá trị ở phía Java và với created_at trường có kiểu DATETIME trong MySQL và H2.

Mã kotlin thu được rút gọn là:

@Entity
data class SomeEntity(
    val createdAt: Instant = Instant.now() // default created date is current UTC time
)

val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd H:mm:ss")

createdAt = LocalDateTime.parse("2012-11-30 16:13:21", dateTimeFormatter).toInstant(ZoneOffset.UTC)

Ý tưởng lấy từ nhận xét của "Joop Eggen", cái này điều này bài báo.

Phần thưởng

Tôi đoán nếu bạn đang đọc nó, bạn cũng có thể cần trợ giúp để gỡ lỗi các truy vấn SQL.

1. Để in các truy vấn SQL chạy trên H2, hãy thêm TRACE_LEVEL_FILE=2TRACE_LEVEL_SYSTEM_OUT=2 tới chuỗi kết nối (xem tại đây ):

spring.datasource.url=jdbc:h2:mem:dbname;TRACE_LEVEL_FILE=2;TRACE_LEVEL_SYSTEM_OUT=2;

2. Để bật nhật ký ngủ đông:

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type=TRACE

3. Để bật nhật ký truy vấn trong MySQL (một trong những cách tiếp cận, không sử dụng trên db sản xuất!):

SET GLOBAL general_log = 'ON';
SET global log_output = 'table';
select * from mysql.general_log ORDER BY event_time DESC;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tính toán sự khác biệt giữa hai ngày trong MySQL

  2. Sử dụng biến trong mệnh đề LIMIT trong MySQL

  3. Chuyển đổi giản đồ MySQL sang Github Wiki?

  4. Sử dụng phần mở rộng không gian MySQL để chọn các điểm bên trong vòng tròn

  5. Magento có thể sử dụng nhiều nô lệ MySQL không?