Wygląda na to, że komunikat o błędzie pochodzi z klienta MySQL, a nie z serwera. Tak więc ustawienie trybu ścisłego serwera nie pomoże w wyświetlaniu tych dat dla tego klienta.
Wygląda na to, że masz w swoich danych daty w stylu 31.09.2012 lub 29.02.2013. Są poprawnie sformatowane, ale poza tym są błędne. W wersjach wcześniejszych niż 5.0.2 MySQL nie zostały one złapane poprawnie podczas wchodzenia do danych. Teraz twój serwer ustaw na ALLOW_INVALID_DATES
nie knebluje ich, ale zamiast tego konwertuje je na „0000-00-00”. A klient się nimi gada.
Pierwszym krokiem do oczyszczenia tego jest zidentyfikowanie obraźliwych wierszy. Możesz tego spróbować.
Najpierw włącz ALLOW_INVALID_DATES
Następnie uruchom to zapytanie, aby rozejrzeć się po tabeli. Nie używaj SELECT *
SELECT col,col,col,DATE_FORMAT(datecol,'%Y-%m-%d')
FROM mytable
ORDER BY DATE_FORMAT(datecol,'%Y-%m-%d')
Spróbuj dowiedzieć się z zestawu wyników, które daty są śmieciami. Mogą być umieszczone na pierwszym miejscu w tym oświadczeniu select, ale będziesz musiał trochę pogrzebać, aby je znaleźć.
Następnie zastanów się, jak chcesz je naprawić. Usunąć wiersze? Zmienić datę na 1941-12-07 (data, która żyje w niesławie)? Nie możemy Ci powiedzieć, co musisz tutaj zrobić.
Następnie napraw je. Jeśli jest tylko jeden lub dwa, napraw je jeden po drugim.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE id='the id of the offending row.'
lub
DELETE FROM mytable
WHERE id='the id of the offending row.'
Jeśli jest ich tysiące, możesz je zbiorczo naprawić za pomocą czegoś takiego. Ale nie rób tego bez uprzedniego bardzo dokładnego przeanalizowania problemu na serwerze testowym. Jeśli popełnisz błąd, zniszczysz swój stół.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE '0000-00-00' = DATE_FORMAT(datecol,'%Y-%m-%d')
Po zakończeniu rozwiązywania problemów wróć i wykonaj SELECT *
, aby upewnić się, że masz je wszystkie.
Następnie wyłącz ALLOW_INVALID_DATES
i nigdy nie włączaj go ponownie.
To powinno posprzątać bałagan. Zwróć uwagę, że dane ze świata rzeczywistego zawsze zawierają niektóre wiersze, które nie są w nich idealne.