Se a "data" '0000-00-00 "é ou não uma" data "válida é irrelevante para a pergunta." Basta alterar o banco de dados "raramente é uma solução viável.
Fatos:
- O MySQL permite uma data com o valor de zeros.
- Esse "recurso" desfruta de amplo uso com outros idiomas.
Então, se eu "apenas mudar o banco de dados", milhares de linhas de código PHP serão quebradas.
Os programadores de Java precisam aceitar a data zero do MySQL e precisam colocar uma data zero de volta no banco de dados, quando outros idiomas dependem desse "recurso".
Um programador que se conecta ao MySQL precisa lidar com datas nulas e 0000-00-00, além de datas válidas. Alterar 0000-00-00 para nulo não é uma opção viável, pois não é mais possível determinar se era esperado que a data fosse 0000-00-00 para gravação no banco de dados.
Para 0000-00-00, sugiro verificar o valor da data como uma sequência e alterá-lo para ("y", 1) ou ("aaaa-MM-dd", 0001-01-01) ou em qualquer nome inválido. Data do MySQL (menos de ano 1000, iirc). O MySQL possui outro "recurso": datas baixas são convertidas automaticamente para 0000-00-00.
Percebo que minha sugestão é uma crítica. Mas o mesmo ocorre com o tratamento de datas do MySQL. E dois julgamentos não acertam. O fato é que muitos programadores terão que lidar com datas zero do MySQL para sempre .