Cập nhật dấu thời gian trong MySQL
Trong quá trình thử nghiệm di chuyển mới, chúng tôi đã phát hiện ra rằng các dấu thời gian trong bảng kiểm tra đột nhiên được đặt lại về cùng một dấu thời gian (gần như bây giờ). Điều đó vấp phải một số dây thần kinh. Sau một số điều tra, hóa ra MySQL và MariaDB có thể có hành vi mặc định nguy hiểm khi làm việc với các cột loại 0. Giả sử bạn khai báo một bảng sự kiện kiểm toán như thế này Show
Khi đọc lại định nghĩa bảng (e. g. thông qua MySQL Workbench), bạn sẽ thấy nó thực sự
Lưu ý việc tự động thêm 1 cho cột 2. Điều này tạo ra hai vấn đề
Nguyên nhân của hành vi này là Khởi tạo và cập nhật tự động cho TIMESTAMP và DATETIME, được kiểm soát bởi biến cấu hình clear_defaults_for_timestamp và cũng phụ thuộc vào Chế độ SQL đang hoạt động Để xem cấu hình đang hoạt động của bạn, hãy chạy SQL này trên kết nối đang hoạt động của bạn
Trong trường hợp của chúng tôi, 3 là 4, điều này đặc biệt dẫn đến hành vi được quan sát
một lưu ý khác. Nhóm hoặc nhà cung cấp cơ sở dữ liệu của bạn có thể chưa cấu hình rõ ràng 3. Để thêm sự xúc phạm đến thương tích, giá trị mặc định cho biến này phụ thuộc vào Phiên bản MySQL của bạnMySQL VersiondefaultMySQL >= 8.0.2 0MySQL <= 8.0.1 1MariaDB >= 10.1.8 1Kiểm soát rõ ràng khởi tạo dấu thời gianĐó là tin xấu khi hành vi của ứng dụng của bạn phụ thuộc vào một biến cấu hình cơ sở dữ liệu nằm ngoài sự kiểm soát trực tiếp của nhóm của bạn. Do đó, chúng tôi phải sửa các bảng của mình ngay sau khi tạo chúng như được đề xuất trong câu trả lời stackoverflow này và được điều chỉnh cho MariaDB
Chúng tôi cũng đã thêm một thử nghiệm vào bộ thử nghiệm di chuyển của mình để xác minh tất cả các cột dấu thời gian được tạo như dự định và không có hành vi ẩn nào gây rối với các định nghĩa cột của chúng tôi Làm cách nào để cập nhật DẤU THỜI GIAN hiện tại trong MySQL?Sử dụng truy vấn này. CẬP NHẬT `bảng` SET date_date=now();
Làm cách nào để cập nhật ngày với TIMESTAMP trong SQL?Để cập nhật ngày giờ hiện tại. CẬP NHẬT table_name SET date_field = CURRENT_TIMESTAMP ; . CẬP NHẬT table_name SET date_field = 'YYYY-MM-DD HH. MM. SS.
Làm cách nào để cập nhật DẤU THỜI GIAN trong db?Đầu tiên, chúng tôi lấy một bảng mà chúng tôi muốn cập nhật các trường ngày và giờ. Nếu bạn muốn thay đổi hàng đầu tiên mà id là 1 thì bạn viết cú pháp sau. CẬP NHẬT bảng . SET EndDate = '2014-03-16 00. 00. 00. 000'
Làm cách nào để thêm DẤU THỜI GIAN trong MySQL?Hàm MySQL TIMESTAMPADD()
. Đơn vị cho khoảng thời gian như đã đề cập phải là một trong các đơn vị sau. FRAC_SECOND(micro giây), GIÂY, PHÚT, GIỜ, NGÀY, TUẦN, THÁNG, QUÝ hoặc NĂM. Một biểu thức ngày tháng hoặc thời gian hoặc một số. Một số nguyên. |