Tôi có hai loại cổ phiếu nàysao chép dấu thời gian để DATETIME trên MySQL với Hibernate
class Source {
// mapped to TIMESTAMP
@Version
@Column(columnDefinition="TIMESTAMP(3) DEFAULT '2016-01-01'")
Instant myInstant;
}
class Destination {
// mapped to DATETIME
@Basic(optional=true)
Instant myInstant;
}
Khi sử dụng Hibernate, tôi gán
destination.myInstant = source.myInstant;
và sau đó giá trị được lưu trữ là nhỏ hơn bằng cách một giờ so với bản gốc - cả hai theo dòng lệnh của MySQL client và trong Java. Múi giờ hiện tại của tôi là UTC + 1, vì vậy lý do rõ ràng là chuyển đổi múi giờ.
Có một vài nơi mà điều này có thể được khắc phục, nhưng tôi đang tìm cách thực hành tốt nhất. Máy chủ nên làm việc trên toàn thế giới, vì vậy nó sẽ tiếp tục sử dụng UTC nội bộ, phải không?
Tôi có nên thay đổi loại cột thành TIMESTAMP
không? Sau đó, tại sao Instant
theo bản đồ mặc định là DATETIME
?
Theo this article, Instant
làm đồ-TIMESTAMP
, nhưng trong trường hợp của tôi nó không. Tại sao?
Vui lòng cung cấp 'SHOW CREATE TABLE' và SQL được tạo từ Hibernate. –
@RickJames Không có gì thú vị ở đó: 'SHOW CREATE TABLE' hiển thị các kiểu như' dấu thời gian (3) NOT NULL DEFAULT '2016-01-01 01: 00: 00.000' và 'datetime'. Các câu lệnh chỉ đơn giản là chọn và cập nhật, không có logic đằng sau. Các giá trị không được ghi lại. Dù sao tôi cũng đã đăng nhật ký, nhưng tôi phải thay thế tên thật và tên trường bằng những cái được sử dụng trong câu hỏi của tôi và điều đó không đáng giá vì không có gì ở đó cả. – maaartinus
'HIỂN THỊ VARIABLES LIKE '% zone%';' –