Việc "ngày" '0000-00-00 "có phải là" ngày "hợp lệ hay không không liên quan đến câu hỏi." Chỉ cần thay đổi cơ sở dữ liệu "là một giải pháp khả thi.
Sự thật:
- MySQL cho phép một ngày với giá trị của số không.
- "Tính năng" này thích sử dụng rộng rãi với các ngôn ngữ khác.
Vì vậy, nếu tôi "chỉ thay đổi cơ sở dữ liệu", hàng ngàn dòng mã PHP sẽ bị hỏng.
Các lập trình viên Java cần chấp nhận ngày không có MySQL và họ cần đặt lại ngày không vào cơ sở dữ liệu, khi các ngôn ngữ khác dựa vào "tính năng" này.
Một lập trình viên kết nối với MySQL cần xử lý null và 0000-00-00 cũng như ngày hợp lệ. Thay đổi 0000-00-00 thành null không phải là một lựa chọn khả thi, bởi vì sau đó bạn không còn có thể xác định xem ngày dự kiến là 0000-00-00 để ghi lại vào cơ sở dữ liệu hay không.
Đối với 0000-00-00, tôi khuyên bạn nên kiểm tra giá trị ngày dưới dạng chuỗi, sau đó thay đổi thành ("y", 1) hoặc ("yyyy-MM-dd", 0001-01-01) hoặc thành bất kỳ không hợp lệ Ngày MySQL (dưới 1000 năm, iirc). MySQL có một "tính năng" khác: ngày thấp được tự động chuyển thành 0000-00-00.
Tôi nhận ra đề nghị của tôi là một loại bùn. Nhưng xử lý ngày của MySQL cũng vậy. Và hai loại bùn không làm cho nó đúng. Thực tế của vấn đề là, nhiều lập trình viên sẽ phải xử lý MySQL zero- date mãi mãi .