Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql коригира невалидни дати

Изглежда, че съобщението ви за грешка идва от вашия 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 и никога повече не го активирайте.

Това трябва да почисти бъркотията. Забележете, че в реалните данни винаги има редове, които не са перфектни в тях.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ИЗВЪРШЕН ЗАСТЪПВАНЕ Създаване на спешни нишки за неразпределени висящи задачи

  2. Предупреждение:mysqli_num_rows() очаква точно 1 параметър, 2 дадени | mysql |mysqli

  3. Как да добавите критерии за търсене и филтриране в Yii

  4. Интегриране на ssl с mysql - Отказан достъп

  5. Предотвратяване на SQL инжектиране в C