Изглежда, че съобщението ви за грешка идва от вашия MySQL клиент, а не от сървъра. Така че задаването на строг режим на сървъра няма да ви помогне да покажете тези дати с този клиент.
Изглежда, че имате някои дати в стил 2012-09-31 или 2013-02-29 в данните си. Те са правилно форматирани, но иначе са грешни. В версиите на MySQL преди 5.0.2 те не са били уловени правилно при влизане във вашите данни. Сега вашият сървър е зададен на ALLOW_INVALID_DATES
не ги запушва, а вместо това ги преобразува в '0000-00-00'. И клиентът се заяжда с тях.
Първата ви стъпка към изчистването на това е да идентифицирате редовете в нарушение. Можете да опитате това.
Първо включете ALLOW_INVALID_DATES
След това изпълнете тази заявка, за да разгледате таблицата си. Не използвайте SELECT *
SELECT col,col,col,DATE_FORMAT(datecol,'%Y-%m-%d')
FROM mytable
ORDER BY DATE_FORMAT(datecol,'%Y-%m-%d')
Опитайте се да разберете от набора от резултати кои дати са боклук. Те може да са поставени на първо място в това избрано изявление, но ще трябва да помръднете малко, за да ги намерите.
След това разберете как искате да ги поправите. Да се изтрият ли редовете? Промяна на датата на 1941-12-07 (датата, която живее в позор)? Не можем да ви кажем какво трябва да направите тук.
След това ги поправете. Ако има само един или два, поправете ги един по един.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE id='the id of the offending row.'
или
DELETE FROM mytable
WHERE id='the id of the offending row.'
Ако има хиляди от тях, можете да ги поправите групово с нещо подобно. Но не правете това, без първо да разгледате проблема много внимателно на тестов сървър. Ако направите грешка, ще изхвърлите масата си.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE '0000-00-00' = DATE_FORMAT(datecol,'%Y-%m-%d')
След като приключите с коригирането на проблемите си, върнете се и направете своя SELECT *
, за да се уверите, че имате всичките.
След това деактивирайте ALLOW_INVALID_DATES
и никога повече не го активирайте.
Това трябва да почисти бъркотията. Забележете, че в реалните данни винаги има редове, които не са перфектни в тях.