MySQL 5.5 – phpMyAdmin : syntax error “TYPE=” en timestamp
Een CMS of andere applicatie overzetten van een oude server naar een nieuwe, levert soms onverwachte problemen op, die op het eerste zicht weinig te maken hebben met het programma zelf. Zoals een onverwachte fout bij het maken van de tabellen; hier herhaalbaar met phpMyAdmin.
Ik maak een export van een tabel “tabeltest” op mysql server.
Ik gebruik daarvoor phpMyAdmin (hier NL-talige versie*) met de keuzes:
- Export.SQL,
- Structuur (auto_increment, bbadkquotes)
- Data (hexadicimaal voor binaire velden)
- verzenden zonder compressie.
* “Verzenden” betekent dat je het aangeboden krijgt als bestand; “als bestand” zou betere vertaling geweest zijn.
Import op Mysql 5.5, met phpMyAdmin 3.4.10:
Geeft foutmelding op syntax ongeveer zoals hieronder:
Fout
SQL-query
….
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
‘(14) NOT NULL, PRIMARY KEY (lclr_id) TYPE=MyISAM AUTO_INCREMENT=1896 at line 25
Ik gebruik bij het importeren “Formaatspecifieke opties, SQL-compatibiliteitsmode: MySQL 323.
Dit komt omdat phpMyAdmin op de oude server de syntax “TYPE=” gebruikt om de storage engine op te geven, en deze schrijfwijze is ondertussen afgeschaft. Je kan die echter vervangen door “ENGINE=”, zonder verder veel aan te passen.
Open het export bestand in bv Kate, vervang TYPE= door ENGINE=, bewaar.
Importeer dit gewijzigd bestand.
Dan werkt het wel:
Import is geslaagd, 978 queries uitgevoerd (test.sql)
Bij een andere tabel lukt het niet, dus er moet nog een andere fout inzitten.
Dezelfde tabel importeren op MySQL 5.1.37-2 met phpMyAdmin 3.2.3deb gaat wel !
Daar EXPORT die verschilt in een lijn met een timestamp:
export oude versie:
lclr_upddate timestamp(14) NOT NULL,
export nieuwe versie:
lclr_upddate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP