Giá trị mặc định không hợp lệ cho DateTime khi thay đổi thành utf8_general_ci


7

Tôi đang cố chạy một kịch bản để sửa đổi cơ sở dữ liệu, truy vấn này

ALTER TABLE cmContentVersion CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

đưa ra lỗi này

ERROR 1067 (42000) at line 68: Invalid default value for 'modifiedDateTime'
Warning (Code 1264): Out of range value for column 'modifiedDateTime' at row 1
Error (Code 1067): Invalid default value for 'modifiedDateTime'

cột modifiedDateTimeđược định nghĩa là

`modifiedDateTime` datetime NOT NULL default '0000-00-00 00:00:00',

Câu hỏi: Có giá trị mặc định " không hợp lệ " hợp lệ có thể thay thế 0000-00-00 00:00:00khi sử dụng utf8_general_ci. Hay tôi phải nói với các nhà phát triển ngừng dựa vào " ngày không hợp lệ " trong mã của họ?

Câu trả lời:


14

Điều này trông giống như một vấn đề chế độ SQL hơn là tập char. Chế độ nghiêm ngặt (và cụ thể hơn là NO_ZERO_DATE, một phần của chế độ nghiêm ngặt) thường đặt ra lỗi đó nếu bảng được tạo với ngày mặc định hoàn toàn bằng 0 trước khi bật nghiêm ngặt.

Những gì chúng tôi sử dụng (cho các cột ngày sửa đổi tương tự), là '1970-01-01 00:00:01'.

và trên một lưu ý hơi liên quan, chúng tôi sử dụng dấu thời gian cho các cột này (và cho cả thời gian đã tạo). Chiếm một nửa không gian lưu trữ và truy cập nhanh hơn.


1
NO_ZERO_IN_DATE, NO_ZERO_DATE đã được đặt trong db mới, cảm ơn vì đã phát hiện ra nó.
Nifle

@TechieGurl: +1 để nắm bắt tốt !!!
RolandoMySQLDBA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.