sql >> Database teknologi >  >> RDS >> Mysql

mysql fix ugyldige datoer

Det ser ud til, at din fejlmeddelelse kommer fra din MySQL-klient, ikke serveren. Så at indstille serveren streng tilstand vil ikke hjælpe dig med at vise disse datoer med denne klient.

Det ser ud til, at du har nogle 2012-09-31 eller 2013-02-29 stildatoer i dine data. De er korrekt formateret, men ellers er de forkerte. I før 5.0.2 versioner af MySQL blev disse ikke fanget korrekt ved at gå ind i dine data. Nu, din server, indstillet til ALLOW_INVALID_DATES gagger ikke på dem, men konverterer dem i stedet til '0000-00-00'. Og klienten sætter pris på dem.

Dit første skridt til at rydde op i dette er at identificere de fornærmende rækker. Du kunne prøve dette.

Først skal du aktivere ALLOW_INVALID_DATES

Kør derefter denne forespørgsel for at se dig omkring i din tabel. Brug ikke SELECT *

  SELECT col,col,col,DATE_FORMAT(datecol,'%Y-%m-%d') 
    FROM mytable
   ORDER BY DATE_FORMAT(datecol,'%Y-%m-%d') 

Prøv ud fra resultatsættet at finde ud af, hvilke datoer der er skrald. De kan være placeret først i denne udvalgte erklæring, men du bliver nødt til at rode lidt for at finde dem.

Dernæst skal du finde ud af, hvordan du vil rette dem. Vil du slette rækkerne? Ændre datoen til 1941-12-07 (datoen, der lever i skændsel)? Vi kan ikke fortælle dig, hvad du skal gøre her.

Så fiks dem. Hvis der kun er en eller to, skal du rette dem en efter en.

  UPDATE mytable
     SET datecol='whatever replacement date'
   WHERE id='the id of the offending row.'

eller

  DELETE FROM mytable
        WHERE id='the id of the offending row.'

Hvis der er tusindvis af dem, kan du løse dem i massevis med sådan noget. Men gør ikke dette uden først at have gennemgået problemet meget omhyggeligt på en testserver. Hvis du laver en fejl, smider du dit bord.

  UPDATE mytable
     SET datecol='whatever replacement date'
   WHERE '0000-00-00' = DATE_FORMAT(datecol,'%Y-%m-%d')

Når du er færdig med at rette dine problemer, skal du gå tilbage og gøre din SELECT * , for at sikre, at du har dem alle sammen.

Deaktiver derefter ALLOW_INVALID_DATES og genaktiver den aldrig igen.

Det burde rydde op i rodet. Bemærk, at data fra den virkelige verden altid er nogle rækker, der ikke er perfekte i det.




  1. MySQL Trigger - opdater tabel med værdi valgt fra en anden tabel

  2. hvordan kan jeg indstille data fra databasen i afkrydsningsfeltet ved hjælp af form i zend framework 1.11

  3. række til kolonne konvertering i mysql

  4. Sådan forhindres duplikatposter fra min tabel. Indsæt ignorering virker ikke her