Zdá se, že vaše chybová zpráva přichází z vašeho klienta MySQL, nikoli ze serveru. Nastavení přísného režimu serveru vám tedy nepomůže zobrazit tato data u tohoto klienta.
Zdá se, že máte ve svých datech nějaká data ve stylu 2012-09-31 nebo 2013-02-29. Jsou správně naformátované, ale jinak jsou špatně. Ve verzích MySQL starší než 5.0.2 nebyly tyto správně zachyceny při vstupu do vašich dat. Nyní váš server nastavte na ALLOW_INVALID_DATES
neroubuje na nich, ale místo toho je převádí na '0000-00-00'. A klient na ně gackuje.
Prvním krokem k vyčištění je identifikovat problematické řádky. Můžete to zkusit.
Nejprve zapněte ALLOW_INVALID_DATES
Poté spusťte tento dotaz a rozhlédněte se ve své tabulce. Nepoužívejte SELECT *
SELECT col,col,col,DATE_FORMAT(datecol,'%Y-%m-%d')
FROM mytable
ORDER BY DATE_FORMAT(datecol,'%Y-%m-%d')
Zkuste ze sady výsledků zjistit, která data jsou nesmysl. Mohou být umístěny na prvním místě v tomto výběrovém prohlášení, ale budete muset trochu makat, abyste je našli.
Dále zjistěte, jak je chcete opravit. Smazat řádky? Změnit datum na 12. 12. 1941 (datum, které žije v hanbě)? Nemůžeme vám říci, co musíte udělat.
Pak je opravte. Pokud existuje pouze jeden nebo dva, opravte je jeden po druhém.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE id='the id of the offending row.'
nebo
DELETE FROM mytable
WHERE id='the id of the offending row.'
Pokud jich jsou tisíce, můžete je hromadně opravit něčím takovým. Nedělejte to však, aniž byste problém nejprve velmi pečlivě prošli na testovacím serveru. Pokud uděláte chybu, smažete svůj stůl.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE '0000-00-00' = DATE_FORMAT(datecol,'%Y-%m-%d')
Po dokončení nápravy problémů se vraťte a proveďte SELECT *
, abyste se ujistili, že je máte všechny.
Poté deaktivujte ALLOW_INVALID_DATES
a nikdy jej znovu neaktivujte.
To by mělo uklidit nepořádek. Všimněte si, že v reálných datech jsou vždy řádky, které v nich nejsou dokonalé.