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

como resuelvo este error 1264

Estas en el tema de como resuelvo este error 1264 en el foro de Mysql en Foros del Web. Hola, estoy algo confundido con este errro, tengo una columna definida com int(12) e ingreso en ella 11 digitos y me da un error. El ...
  #1 (permalink)  
Antiguo 15/12/2010, 18:04
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
como resuelvo este error 1264

Hola, estoy algo confundido con este errro, tengo una columna definida com int(12) e ingreso en ella 11 digitos y me da un error. El error es en el campo Celular resaltado con rojo
Código:
 A Database Error Occurred

         Error Number: 1264
Out of range value for column 'Celular' at row 1
INSERT  INTO `cliente` (`idCliente`, `idTipoCliente`, `idNacionalidad`, 
 `Convenio`, `Nombre`, `Apellido`, `Identidad`, `Direccion`, `Email`,  `Telefono`, `Celular`, `Fax`, `Responsable`, `fotoUrl`) 
VALUES ('20',  '1', '1', '0', 'Jeremias Copia', 'Loque Amen', '23564897', 'Jr Lo  Recuerdos,
 viejos 653', '[email protected]', '565897', '96946793478',  '235698745', '0', 'DSC048922.JPG')
aqui el describe de mi tabla:

Código:
'idCliente', 'int(11)', 'NO', 'PRI', '', ''
'idTipoCliente', 'int(11)', 'NO', 'MUL', '', ''
'idNacionalidad', 'int(11)', 'NO', 'MUL', '', ''
'Convenio', 'tinyint(1)', 'YES', '', '', ''
'Nombre', 'varchar(75)', 'NO', '', '', ''
'Apellido', 'varchar(75)', 'YES', '', '', ''
'Identidad', 'varchar(11)', 'NO', '', '', ''
'Direccion', 'varchar(150)', 'YES', '', '', ''
'Email', 'varchar(100)', 'YES', '', '', ''
'Telefono', 'int(9)', 'YES', '', '', ''
'Celular', 'int(11)', 'YES', '', '', ''
'Fax', 'int(11)', 'YES', '', '', ''
'Responsable', 'tinyint(1)', 'YES', '', '', ''
'fotoUrl', 'varchar(150)', 'NO', '', '', ''
Cual seria la causa del error?
  #2 (permalink)  
Antiguo 15/12/2010, 18:37
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: como resuelvo este error 1264

pues si traduces el error que te indica mysql es que estas fuera de rango lo mas seguro es que tengas un numero de mas en el valor de celular, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 15/12/2010, 18:40
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mexico
Mensajes: 1
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: como resuelvo este error 1264

Por que no aumentas el tamaño del campo, normalmente es por el tamaño, deja sobrado en uno y limita las entradas a uno menos del tamaño total.
  #4 (permalink)  
Antiguo 15/12/2010, 20:56
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: como resuelvo este error 1264

Si amigos es lo primero que pense, que el valor esta fuera de rango, pero yo ya subi la cantidad de numeros a un int(12) y me sigue apereciendo el mismo error.
  #5 (permalink)  
Antiguo 16/12/2010, 05:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: como resuelvo este error 1264

El error es que ese valor (12) que estás poniendo en la definición del campo no tiene nada que ver con el rango de la columna. Eso representa otra cosa y no la cantidad de dígitos posibles. Esta es una confusión muy habitual.
El único tipo de campos donde ese valor representa la cantidad de digitos en es DECIMAL(m,n), DOUBLE(m,n) o FLOAT(m,n,), donde la m representa el ancho de la cifra, pero no es el caso de INT.
Yendo al manual (MySQL 5.0 Reference Manual :: 11 Tipos de columna :: 11.2 Tipos numéricos) podrás ver que:
Cita:
MySQL soporta otra extensión para especificar de forma óptima el ancho a mostrar de un tipo entero en paréntesis después de la palabra clave para el tipo (por ejemplo, INT(4)). Esta especificación opcional del ancho de muestra se usa para alinear a la izquierda la muestra de los valores con ancho menor que el ancho especificado para la columna.

El ancho de muestra no restringe el rango de valores que pueden almacenarse en la columna, sino el número de dígitos que se muestran para valores con ancho que exceda el especificado para la columna.

Cuando se usa en conjunción con el atributo de extensión opcional ZEROFILL, el relleno por defecto de espacios se reemplaza por ceros. Por ejmplo, para una columna declarada como INT(5) ZEROFILL, un valor de 4 se muestra como 00004. Tenga en cuenta que si almacena valores mayores que el ancho de muestra en una columna entera, puede tener problemas cuando MySQL genera tablas temporales para algunos joins complicados, ya que en estos casos MySQL cree que los datos encajan en el ancho original de la columna
(los resaltados son míos)

Lo que sucede en tu caso es que:

1) Estás desperdiciando la mitad del rango de datos porque estás usando un tipo numérico con signo para un dato numérico sin signo. Esto hace que sólo puedas almacenar datos entre el 0 y 2.147.483.647, y el que quieres poner es 96.946.793.478, obviamente mayor. De todos modos en este caso no resulta útil porque es mayor incluso que el rango de un INT UNSIGNED: 4.294.967.295.

2) Estás equivocando el tipo de columna si lo que quieres almacenar es un teléfono. Teléfonos, faxes, celulares, numero de documento o identificadores de ese tipo no se almacenan por razones prácticas como enteros sino como VARCHAR, porque los campos numéricos eliminan los ceros de a la izquierda de los mismos (regla aritmética aprendida en la primaria), que pueden ser importantes en ese tipo de datos. ¿Se entiende?

La solución (si no quieres usar VARCHAR) es cambiar el tipo INT por BIGINT UNSIGNED. Con eso te alcanzará (18.446.744.073.709.551.615).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 16/12/2010 a las 05:56
  #6 (permalink)  
Antiguo 17/12/2010, 14:26
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: como resuelvo este error 1264

Gracias gonzalo, tienes razon en eso de decir que nos confundimos en la cantidad que acepta el tipo de datos. Muchas gracias me lo has aclarado y ademas me hiciste recordar porque puse inicialmente varchar a esos campos :S.

Gracias.

Etiquetas: Ninguno
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:15.