Lỗi là do chế độ sql có thể là chế độ nghiêm ngặt theo tài liệu MYSQL 5.7 mới nhất
Tài liệu MySQL 5.7 cho biết :
Chế độ nghiêm ngặt ảnh hưởng đến việc máy chủ có cho phép '0000-00-00' là ngày hợp lệ hay không: Nếu chế độ nghiêm ngặt không được bật, '0000-00-00' được cho phép và việc chèn không tạo ra cảnh báo. Nếu chế độ nghiêm ngặt được bật, '0000-00-00' không được phép và các phần chèn tạo ra lỗi, trừ khi cũng đưa ra BỎ QUA. Đối với CHÈN BỎ QUA và CẬP NHẬT BỎ QUA, cho phép '0000-00-00' và các phần chèn tạo ra cảnh báo.
Để kiểm tra chế độ MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Đang tắt chế độ STRICT_TRANS_TABLES
Tuy nhiên, để cho phép định dạng, 0000-00-00 00:00:00
bạn phải tắt chế độ STRICT_TRANS_TABLES trong tệp cấu hình mysql hoặc bằng lệnh
Theo lệnh
SET sql_mode = '';
hoặc là
SET GLOBAL sql_mode = '';
Việc sử dụng từ khóa này GLOBAL
đòi hỏi các nguyên tắc siêu cấp và nó ảnh hưởng đến hoạt động của tất cả các khách hàng kết nối từ đó trở đi
nếu ở trên không hoạt động, hãy truy cập /etc/mysql/my.cnf
(theo ubuntu) và nhận xétSTRICT_TRANS_TABLES
Ngoài ra, nếu bạn muốn thiết lập vĩnh viễn chế độ sql lúc khởi động máy chủ sau đó bao gồm SET sql_mode=''
trong my.cnf
trên Linux hoặc hệ điều hành MacOS. Đối với cửa sổ, điều này phải được thực hiện trong my.ini
tệp.
Ghi chú
Tuy nhiên, chế độ nghiêm ngặt không được bật theo mặc định trong MYSQL 5.6. Do đó, nó không tạo ra lỗi theo tài liệu MYSQL 6 cho biết
MySQL cho phép bạn lưu trữ giá trị "0" của '0000-00-00' dưới dạng "ngày giả". Trong một số trường hợp, điều này thuận tiện hơn so với việc sử dụng giá trị NULL và sử dụng ít không gian dữ liệu và chỉ mục hơn. Để không cho phép '0000-00-00', hãy bật chế độ SQL NO_ZERO_DATE.
CẬP NHẬT
Về vấn đề lỗi như đã nói bởi @ Dylan-Su:
Tôi không nghĩ đây là lỗi mà nó là cách MYSQL được phát triển theo thời gian do đó một số thứ được thay đổi dựa trên cải tiến hơn nữa của sản phẩm.
Tuy nhiên, tôi có một báo cáo lỗi liên quan khác liên quan đến NOW()
chức năng
Trường ngày giờ không chấp nhận NOW () mặc định
Một lưu ý hữu ích khác [xem Tự động khởi tạo và cập nhật cho TIMESTAMP và DATETIME ]
Kể từ MySQL 5.6.5, các cột TIMESTAMP và DATETIME có thể được tự động khởi tạo và cập nhật thành ngày và giờ hiện tại (nghĩa là dấu thời gian hiện tại). Trước 5.6.5, điều này chỉ đúng với TIMESTAMP và tối đa một cột TIMESTAMP trên mỗi bảng. Các ghi chú sau đây đầu tiên mô tả việc khởi tạo và cập nhật tự động cho MySQL 5.6.5 trở lên, sau đó là sự khác biệt cho các phiên bản trước 5.6.5.
Cập nhật về NO_ZERO_DATE
Đối với MySQL kể từ ngày 5.7.4, chế độ này không được dùng nữa. Đối với phiên bản trước, bạn phải nhận xét dòng tương ứng trong tệp cấu hình. Tham khảo tài liệu MySQL 5.7 vào NO_ZERO_DATE
NULL
là những gì dành cho.