¿Se insertó un entero incorrecto (2147483647) en MySQL?

4 minutos de lectura

¿Se inserto un entero incorrecto 2147483647 en MySQL
Archey

Muy bien, he estado jugando con Steam Web API, tengo uno de los valores almacenados en una variable llamada $steam64. Cuando uso este fragmento de código para INSERTARLO en una base de datos mysql, inserta un número entero completamente diferente al que está almacenado en la variable.

$sql_query = "INSERT INTO users_info (steam64) VALUES ('$steam64')";

var_dump($steam64); devuelve el int real, al igual que el eco. No estoy muy seguro de lo que está pasando aquí, cualquier ayuda es apreciada.

  • Qué es insertado (y qué era tirado) y qué es el tipo de columna? Es probable que no sea un “error” en MySQL, lo que significa que el problema está en otra parte…

    usuario166390

    21 de abril de 2012 a las 2:44


  • no debería necesitar las comillas simples en un número entero. puede estar intentando insertar la cadena ‘$steam64’ como un número entero, convirtiéndolo en el proceso.

    – Lazerblade

    21 de abril de 2012 a las 2:47

  • @pst 2147483647 se está insertando, 76561197989628470 se está descargando, el tipo de columna es int(255).

    – Archey

    21 de abril de 2012 a las 2:55


  • @Lazerblade simplemente lo tiene VALUES ($steam64) todavía inserta el int incorrecto.

    – Archey

    21 de abril de 2012 a las 2:56

  • dev.mysql.com/doc/refman/5.5/en/integer-types.html

    – Eugenio José

    31 de julio de 2014 a las 7:13

2147483647 es el valor int más grande para mysql. Simplemente cambie el tipo de int a bigint.

  • Vale la pena señalar que BIGINT tiene un límite de -9223372036854775808 a 9223372036854775807 (firmado) o de 0 a 18446744073709551615 (sin firmar). si desea el entero SOLO POSITIVO más grande, use algo como COLUMNNAME BIGINT(32) POR DEFECTO SIN FIRMA 0

    – Luis

    17 mayo 2017 a las 18:14

1646747052 949 ¿Se inserto un entero incorrecto 2147483647 en MySQL
mike purcell

Basado en su comentario de “valor objeto de dumping”; el número que intenta insertar es demasiado grande para los sistemas de 32 bits. El máximo para 32 bits es 4,294,967,295y el máximo para 64 bits es 18.446.744.073.709.551.615. Recomendaría convertir su columna en un varchar(100) hash en lugar de un int, o cambie a un sistema de 64 bits. Genial artículo sobre entradas máximas aquíy aquí.


Además, antes de que me llamen, asegúrate de leer sobre inyección SQL en caso de que no esté desinfectando las variables que se publican directamente en las declaraciones sql.

  • Actualización publicada. El número que intenta insertar es demasiado grande.

    –Mike Purcell

    21 de abril de 2012 a las 3:01

  • Gracias 🙂 ¿Es PHP o MySQL el que tiene el límite?

    – Archey

    21 de abril de 2012 a las 3:06

  • Es un límite del sistema, por lo que cualquier aplicación que intente acceder a un número tan grande tendrá un comportamiento inesperado.

    –Mike Purcell

    21 de abril de 2012 a las 3:07

  • Muy bien, una pregunta rápida con eso, si quisiera tener un ciclo for con una variable que sea algo así como 76561197980000000, ¿sería eso posible?

    – Archey

    21 de abril de 2012 a las 3:22

  • Sí, siempre y cuando no sea un int.

    –Mike Purcell

    21 de abril de 2012 a las 3:43

¿Se inserto un entero incorrecto 2147483647 en MySQL
Lyserty

Mientras jugaba con SQL y MySQL, tuve el mismo problema con el tipo de datos MySQL int. Modificar el tipo de datos de En t para Empezando problema solucionado

Tipos enteros de MySQL http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

ALTER TABLE tablename MODIFY columnname BIGINT; 

Simplemente cambie el tipo de datos de INT a BIGINT

El valor más grande para el tipo de datos INT es 2147483647. Si el número que está insertando es mayor que 2147483647, entonces causará el problema. Como solución, cambie el tipo de datos de INT a BIGINT ya que BIGINT tiene un valor máximo de 9223372036854775807, podría resolver su problema. Echa un vistazo a esta página:
https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

1646747054 393 ¿Se inserto un entero incorrecto 2147483647 en MySQL
rodney salcedo

El tipo entero EN T es almacenamiento de 4 bytes, se obtiene de -2^(4*8-1)=-2147483648 para 2^(4*8-1)-1=2147483647cuando tengas “firmado” banderas, si cambia las banderas a no firmado tendrás un rango de 0 para 2^(4*8)-1 . MySQL admite BIGINT siendo 8Bytes de almacenamiento. Si intenta guardar un valor mayor, guardará el valor máximo del rango

1646747055 763 ¿Se inserto un entero incorrecto 2147483647 en MySQL
lalit mohan

Vaya a operaciones-> opciones de tabla -> cambie los valores de incremento al mínimo o lo que quiera incrementar.

el gran problema del autoincremento es que comienza por error desde la última entrada si su valor es muy grande, luego comienza el problema en el valor de inserción … con nuestro tipo de datos predefinido
ingrese la descripción de la imagen aquí

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad