"Tarih" "0000-00-00" 'un geçerli bir "tarih" olup olmadığı sorusu ile ilgisizdir. "Sadece veritabanını değiştirmek" nadiren uygulanabilir bir çözümdür.
Gerçekler:
- MySQL, sıfır değerine sahip bir tarihe izin verir.
- Bu "özellik" diğer dillerde yaygın olarak kullanılmaktadır.
Yani, "sadece veritabanını değiştirmek", binlerce satır PHP kodu kırılacak.
Java programcılarının MySQL sıfır tarihini ve diğer diller bu "özelliği" güvenmek ne zaman veritabanı, içine bir sıfır tarih geri koymak gerekir.
MySQL'e bağlanan bir programcının boş tarihleri ve 0000-00-00'ü geçerli tarihlerle işlemesi gerekir. 0000-00-00 değerini null olarak değiştirmek uygun bir seçenek değildir, çünkü o zaman artık veritabanına geri yazmak için tarihin 0000-00-00 olup olmayacağını belirleyemezsiniz.
0000-00-00 için, tarih değerini bir dize olarak kontrol etmenizi ve ardından ("y", 1) veya ("yyyy-AA-dd", 0001-01-01) olarak veya herhangi bir geçersiz olarak değiştirmenizi öneririm MySQL tarihi (1000 yıldan az, iirc). MySQL'in başka bir özelliği daha vardır: düşük tarihler otomatik olarak 0000-00-00 biçimine dönüştürülür.
Önerimin bir çamur olduğunu anlıyorum. Ancak MySQL'in tarih işlemesi de öyle. Ve iki kludge bunu düzeltmiyor. Mesele şu ki, birçok programcı MySQL sıfır tarihlerini sonsuza kadar işlemek zorunda kalacak .