Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Error 1265, ¿error de sintaxis?

Estas en el tema de Error 1265, ¿error de sintaxis? en el foro de Mysql en Foros del Web. Hola a Todos. Me aparece este error al lanzar un archivo ".sql" sobre una base de datos. Tengo mas o menos localizado el error. El ...
  #1 (permalink)  
Antiguo 18/12/2008, 11:43
Avatar de ToLeR  
Fecha de Ingreso: noviembre-2008
Ubicación: Laboratorio La Ratonera
Mensajes: 48
Antigüedad: 15 años, 5 meses
Puntos: 1
Error 1265, ¿error de sintaxis?

Hola a Todos.

Me aparece este error al lanzar un archivo ".sql" sobre una base de datos.
Tengo mas o menos localizado el error. El fichero que se lanza ejecuta primero un create table y luego una serie de inserts sobre dicha tabla creada anteriormente.

El error hace referencia a los siguientes campos (el error hace referencia a uno, pero al solucionarlo, ocurre en los siguientes del mismo tipo):

CREATE TABLE `ventas` (

.......

`encargo` enum('si','no') NOT NULL default 'no',
`exclusiva` enum('si','no') NOT NULL default 'no',
`origen_inmobexo` enum('si','no') NOT NULL default 'si',

........


El error se soluciona cuando voy uno por uno a los campos del insert y les coloco "manualmente" el "si" o el "no".

INSERT INTO `ventas` VALUES (25707, ......... '', '', '', ...........) ----> ERROR
_________________________________________________

INSERT INTO `ventas` VALUES (25707, ......... 'no', 'no', 'si', ...........) -----> OK

El problema esque son bastantes inserts como para ir modifiandolo uno a uno (cada insert tiene 70 campos).

Esta bien las sentencias de dichos campos, en el create table????
Que otra solucion veis?

Muchas gracias.
  #2 (permalink)  
Antiguo 18/12/2008, 16:34
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Error 1265, ¿error de sintaxis?

No he usado campos ENUM, pero por lo poco que se, que tengas una lista de inserts con cadenas vacias indica que no se insertaron valores correctos en esos registros. ¿Quizás puedas arreglarlo si declaras ENUM('si','no,'') y luego cambiarlo a ENUM('si','no')?

Por decir algo...
__________________
WebSenior
  #3 (permalink)  
Antiguo 19/12/2008, 00:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Error 1265, ¿error de sintaxis?

estoy con kurroman,
creo que el problema es cómo llegan los valores '' para el campo de tipo ENUM
Si lo que quieres es que escriba el valor por defecto, puedes poner para esos campos valores DEFAULT, pero sin comillas. Me explico:
INSERT INTO tabla ('22388',...., DEFAULT, DEFAULT,...)

Piensa que el valor o bien es 'si' o bien es 'no', pero no puede ser '', que no es ni una cosa, ni otra, sino una cadena vacía o texto en blanco. Te da error, porque '' es un valor, pero no está dentro de la lista de posibilidades. De ahí, creo, el problema. Pero mi pregunta sigue siendo la misma, ¿cómo generas ese valor '' para los campos?, ¿ te llega desde un formulario? Tú puedes controlar ese valor mediante programación para que cuando llegue esa cadena vacía, es decir cuando te llegue '', inserte default en esa posición, y si tiene un valor, que inserte ese valor.

En el manual alguien lo explica mejor:
Cita:
Note that in MySQL 5's strict mode, if you declare a column NOT NULL(se refiere a una columna ENUM), you are forced to specify a value for it:

mysql> CREATE TABLE myenum (col ENUM('a', 'b', 'c', 'd') NOT NULL);
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO myenum VALUES (NULL);
ERROR 1048 (23000): Column 'col' cannot be null

mysql> INSERT INTO myenum VALUES ('');
ERROR 1265 (01000): Data truncated for column 'col' at row 1
Aclara más adelante que si quieres usar '' lo puedes definir como valor del ENUM, como te ha aconsejado kurroman, pero no sé si eso es lo que quieres.

Parece ser el SQL strict mode de MySQL 5 "el culpable", pero tendrás que buscar una solución. No sé si cambiarlo sería una buena solución. Quizás con programación podrías resolver el problema. No sé, la verdad, qué sería mejor. Deberíamos saber cómo te llegan esos valores.

Última edición por jurena; 19/12/2008 a las 02:03
  #4 (permalink)  
Antiguo 19/12/2008, 03:56
Avatar de ToLeR  
Fecha de Ingreso: noviembre-2008
Ubicación: Laboratorio La Ratonera
Mensajes: 48
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Respuesta: Error 1265, ¿error de sintaxis?

Pues los valores los genera phpmyadmin desde servidor remoto. Simplemente estoy exportando una base de datos entera, que tengo que modificar. Primero exporte a un fichero sql todas las tablas de la base de datos, pero me aparecio dicho error. A continuación comprobe que hasta dicha tabla todo estaba bien.

Bueno la cuestion, esque este fichero me lo crea phpmyadmin desde el servidor remoto y contiene las sentencias create table y los inserts de dicha tabla.

si al crear la tabla ya le dice por defecto el valor de dicho campo???? pero luego al realizar el insert lo pone como una cadena de caracteres vacia, alomejor no me qued otra que modificar los inserts uno a uno? puff ay un monton!!!!!!!!!!!.

El problema es que es un fichero no generado por mi. Si no pues con php me las apañaria para hacerlo todo de una. Pense que no estaria bien la sentencia en el create table, pero eso si parece estar bien, no?????????
  #5 (permalink)  
Antiguo 19/12/2008, 10:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Error 1265, ¿error de sintaxis?

Yo antes probaría alguna otra cosa.
Lo primero, lo que te aconsejó kurroman, si lo entendí bien: modicar la creación de la tabla añadiendo un valor al enum, el '', como te he puesto en el ejemplo.


CREATE TABLE `ventas` (

.......

`encargo` enum('si','no','') NOT NULL default 'no',
`exclusiva` enum('si','no','') NOT NULL default 'no',
`origen_inmobexo` enum('si','no','') NOT NULL default 'si',

........

Prueba.
Luego, si te permite meter los datos, aunque sea con cadena vacía para esos valores, podremos resolver el problema mediante dos simples update a esos campos o modificando de nuevo la lista de valores del ENUM, como sugirió kurroman.

Sé que en parte es una chapuza, pero antes que teclearlo todo, es mejor intentar alguna cosa. Lo que no tiene sentido realmente es que en un campo ENUM se introduzca una cadena vacía, salvo que la tengas contemplada como posibilidad.

Última edición por jurena; 19/12/2008 a las 13:24
  #6 (permalink)  
Antiguo 19/12/2008, 11:06
Avatar de ToLeR  
Fecha de Ingreso: noviembre-2008
Ubicación: Laboratorio La Ratonera
Mensajes: 48
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Error 1265, ¿error de sintaxis?

Gracias jurena y kurroman.

Pues si, la mejor manera que e leido es esa. Lo hare de esa forma, si ocurriera alguna cosa rara lo postearia.

Gracias de nuevo por la ayuda.
  #7 (permalink)  
Antiguo 19/12/2008, 12:45
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Error 1265, ¿error de sintaxis?

de nada hombre, suerte.
__________________
WebSenior
  #8 (permalink)  
Antiguo 19/12/2008, 14:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Error 1265, ¿error de sintaxis?

De nada, Toler.
La verdad, quien vio primero el asunto con claridad fue kurroman. Prueba y dinos qué tal te fue con esa solución.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:04.