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
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, thì '0000-00-00' được cho phép và các đoạn 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 BỎ QUA cũng được đưa ra. Đối với CHÈN BỎ QUA và CẬP NHẬT BỎ QUA, cho phép '0000-00-00' và các lệnh chèn sẽ tạo ra cảnh báo.
Để kiểm tra chế độ MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
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
SET GLOBAL sql_mode = '';
Sử dụng từ khóa GLOBAL
yêu cầu super previliges 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ừ thời điểm đó 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ét STRICT_TRANS_TABLES
Ngoài ra, nếu bạn muốn đặt vĩnh viễn chế độ sql khi khởi động máy chủ thì hãy bao gồm SET sql_mode=''
trong my.cnf
trên Linux hoặc MacOS. Đối với cửa sổ, điều này phải được thực hiện trong my.ini
tệp.
Lưu ý
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 mà nói
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 các 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ư @ Dylan-Su đã nói:
Tôi không nghĩ đây là lỗi mà nó là cách MYSQL phát triển theo thời gian do đó một số thứ được thay đổi dựa trên sự 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 mặc định NOW ()
Một ghi chú 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 đối với 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ừ 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