jueves, 26 de junio de 2014

MySQL Error de tabla 1064

Original post : http://anothermysqldba.blogspot.com/2014/06/mysql-table-error-1064.html

Así que me encontré con una situación extraña hoy. 

Tengo un sistema que crea las tablas de memoria utilizando el PHP $ _COOKIE ['PHPSESSID'] valor. 

Una vez que un poco de trabajo se hace, a continuación, elimina la tabla. 

Dos tablas de ejemplo se encuentran por debajo de mi ejemplo. 


@@VERSION: 5.6.19-log 
CREATE TABLE `f7a7a8d3a7ba75b5eb1712864c9b27eb` ( 
-> `id` int(11) NOT NULL AUTO_INCREMENT, 
-> PRIMARY KEY (`id`) 
-> ) ENGINE=MEMORY; 

CREATE TABLE `8865e52c7e1bea515e7156f240729275` ( 
-> `id` int(11) NOT NULL AUTO_INCREMENT, 
-> PRIMARY KEY (`id`) 
-> ) ENGINE=MEMORY; 


Ahora algo de procesamiento sencillo ocurre en las mesas reales que utilicé entonces como dije me cayeron. 


DROP TABLE IF EXISTS f7a7a8d3a7ba75b5eb1712864c9b27eb; 
Query OK, 0 rows affected (0.09 sec) 


Bastante simple hasta que me encontré con este .. 


desc 8865e52c7e1bea515e7156f240729275; 
ERROR 1064 (42000): 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 '8865e52c7e1bea515e7156f240729275' at line 1 

DROP TABLE IF EXISTS 8865e52c7e1bea515e7156f240729275; 
ERROR 1064 (42000): 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 '8865e52c7e1bea515e7156f240729275' at line 1 


Ahora la solución es realmente muy simple. Pero la pregunta es ¿por qué fracasa una obra y una? 

Para solucionar este problema simplemente tilde el nombre de tabla. ¿Qué debería haber hecho desde el principio de todos modos. Eso es sólo una buena práctica para entrar. 


DROP TABLE IF EXISTS `8865e52c7e1bea515e7156f240729275`; 
Query OK, 0 rows affected (0.02 sec) 


Ahora lo primero que pensé que tal vez el problema era el nombre alfanumérico, pero podemos ver que una versión funciona. La diferencia sin embargo es el inicio del nombre de tabla. Uno de ellos es un número entero y uno es un carácter alfabético. Así que de nuevo .. seguir las mejores prácticas y los nombres de las tablas de presupuesto para evitar este tipo de errores estúpidos. 


Después de todo el código de error es un error de análisis .. 


perror 1064 
MySQL error code 1064 (ER_PARSE_ERROR): %s near '%-.80s' at line %d