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

Cambios de Datos involuntarios

Estas en el tema de Cambios de Datos involuntarios en el foro de Mysql en Foros del Web. Hola a todos He insertado datos en una tabla, pero el dato se cambia solo. He probado de todo, y me he dado cuenta que ...
  #1 (permalink)  
Antiguo 27/01/2012, 09:57
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Cambios de Datos involuntarios

Hola a todos

He insertado datos en una tabla, pero el dato se cambia solo. He probado de todo, y me he dado cuenta que si le inserto un numero de 10 digitos se cambia, pero si es menor se queda igual.

Última edición por sterlingdiazd; 27/01/2012 a las 10:12
  #2 (permalink)  
Antiguo 27/01/2012, 10:12
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Cambios de Datos involuntarios

ESQUEMA DE LA TABLA

tel_Casa int(50) NULL
Tel_Oficina int(50) NULL
Celular int(50) NULL
Id_Usuario int(50) NULL

Antes la longitud del campo era de 11. Lo cambie a 50 para ver si era tenia que ver. Aparentemente no, porque sigue ocurriendo lo mismo.
  #3 (permalink)  
Antiguo 27/01/2012, 10:13
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Cambios de Datos involuntarios

Por ejemplo en telefono, yo escribia un numero de 10 digitos, digamos: 8096166445 y se cambiaba por 2147483647.

Pero si el numero que pongo es 809616644, entonces lo guardo, le doy a Refresh y no se cambia.

Cualquier informacion, libro, link, consejo, cualquier tipo de ayuda es agradecida.
  #4 (permalink)  
Antiguo 27/01/2012, 10:19
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, 4 meses
Puntos: 2658
Respuesta: Cambios de Datos involuntarios

Estás usando mal los tipos de dato.
El número que aparece en la definición de INT, no se usa para determinar la longitud de las cifras, sino para la justificación de la columna (el escribir los numeros a la derecha) en las consultas por consola. No tiene otros efectos.
La longitud o rango de representación de un número está dado por el tipo de dato, y si usas USIGNED son:
Cita:
- TINYINT: 0 a 255.
- SMALLINT: 0 a 65.535.
- MEDIUMINT: 0 a 16.777.215
- INT: 0 a 4.294.967.295.
- BIGINT: 0 a 18.446.744.073.709.551.615
Si observas, verás que un INT sólo puede representar un valor de hasta 10 dígitos, y no todos ellos.
Hay dos soluciones: Una correcta y otra incorrecta.
La correcta es usar un VARCHAR(14), ya que es la longitud mayor que puede tener un número, incluyendo prefijos.
La incorrecta es usar un BIGINT. ¿Por qué? Porque un numero telefónico tiene ceros al inicio en algunos casos, y un número no los tiene. El sistema los elimina.

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/01/2012, 10:22
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Cambios de Datos involuntarios

Dejare la solucion. Busque el numero que me tiraba en google, y encontre esto:

Cuando se intenta almacenar un valor en una columna numérica que está fuera del rango permitido por la columna, MySQL corta el valor en el final del rango permitido y guarda el valor resultante.

Por ejemplo, el ranto de una coluna INT es de -2147483648 a 2147483647. Si intenta insertar -9999999999 en una columna INT, MySQL reemplaza el valor con el mínimo valor del rango y almacena -2147483648 en su lugar. De forma similar, si trata de insertar 9999999999, MySQL reemplaza el valor con el valor máximo del rango y almacena 2147483647 en su lugar.

Si la columna INT es UNSIGNED, el tamaño del rango de la columna es el mismo, pero los límites cambian a 0 y 4294967295. Si intenta almacenar -9999999999 y 9999999999, los valores almacenados en la columna son 0 y 4294967296.

Simplemente cambie el tipo de datos a BigInt, y listo. Gracias
  #6 (permalink)  
Antiguo 27/01/2012, 10:22
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Cambios de Datos involuntarios

Eso es porque el tipo integer en MySQL puede ser máximo 2147483647 (4294967295 si es unsigned) intenta elegir bien el tipo de dato.

por ejemplo para números más grandes puedes utilizar BIGINT que te permite almacenar hasta el 9223372036854775807 (18446744073709551615 si es unsigned) que ya es un poco más grande jajajaja.

Saludos y usa el botón editar, es menos perjudicial para la salud del foro :)

EDIT: vaya, tanto se me adelantaron? xD!
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #7 (permalink)  
Antiguo 27/01/2012, 10:26
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Cambios de Datos involuntarios

Cuando le di a editar, me dijo que no se podia porque ya habian respuestas. Actualice y las acabo de ver.

Muchisimas gracias Ribon, me hubieras respondido la duda, y me diste la solucion a la cual tampoco habia llegado.

BigInt aun no resolveria mi problema, necesito Varchar, como me dijiste, porque quiero tomar telefonos y cedulas, y algunas comienzan con cero, me di cuenta que las eliminaba.

GRACIAS!!!!

Etiquetas: cambios, tabla, campos
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




La zona horaria es GMT -6. Ahora son las 20:05.