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

Các trường Jooq LocalDateTime sử dụng múi giờ hệ thống thay vì múi giờ phiên

Gần đây tôi thấy rằng tùy thuộc vào trình điều khiển cơ sở dữ liệu đang được sử dụng, jOOQ có thể hiển thị một số hành vi lạ trong phân tích cú pháp DateTime. jOOQ trả về thời gian bù đắp ngày là Z (UTC) mặc dù không phải là

Cụ thể, trong trường hợp của tôi, việc sử dụng trình điều khiển Postgres khác dẫn đến việc DefaultBinding.java nhận một đối tượng lịch có dấu thời gian, nhưng gọi toString trên đó để phân tích cú pháp. Hóa ra, toString không in múi giờ, sau đó jOOQ suy ra rằng đó là theo giờ địa phương.

Đối với tôi, các dòng vi phạm trong DefaultBinding.java (tôi đang sử dụng dấu thời gian có múi giờ) là:

else if (type == OffsetDateTime.class) {
    result = (T) offsetDateTime(ctx.resultSet().getString(ctx.index()));
}

Bạn có thể ở một dòng khác trong chuỗi ifs khác đó dựa trên việc không có múi giờ.

Trong thử nghiệm của mình, tôi cũng thấy rằng việc thay đổi thời gian hệ thống đã thay đổi kết quả, nhưng thay đổi thời gian phiên không làm gì cả.

May mắn thay cho tôi, việc chuyển sang trình điều khiển Postgres tiêu chuẩn đã giải quyết được vấn đề. Nếu không, tôi sẽ xem xét quá tải liên kết cho OffsetDateTime để khắc phục việc sử dụng toString và nó liên quan đến việc tước múi giờ liên quan. Rất tiếc, bạn có thể cần phải theo đuổi con đường đó, trừ khi bạn cũng đang sử dụng trình điều khiển SQL hơn mức có thể được nâng cấp hoặc thay thế. Hoặc, bạn có thể lưu trữ nó với một múi giờ và sau đó chuyển đổi sang múi giờ mong muốn khi bạn tải từ cơ sở dữ liệu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JQUERY &php post error 500 (lỗi nội bộ của máy chủ)

  2. Làm thế nào để thực hiện một JOIN từ hai cột khác nhau đến cùng một cột trên một bảng riêng biệt

  3. Đồng bộ cơ sở dữ liệu trên ipad với cơ sở dữ liệu từ xa

  4. Cách làm cho MySQL xử lý UTF-8 đúng cách

  5. Đầu ra PDO chèn utf8