web-dev-qa-db-fra.com

Un entier incorrect (2147483647) est inséré dans MySQL?

D'accord, j'ai donc joué avec l'API Web Steam, j'ai l'une des valeurs stockées dans une variable appelée $Steam64. Lorsque j'utilise ce code snipper pour l'insérer dans une base de données mysql, il insère un entier complètement différent de celui qui est stocké dans la variable.

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

var_dump($Steam64); renvoie le vrai int, tout comme l'écho. Je ne sais pas trop ce qui se passe ici, toute aide est appréciée.

36
Archey

C'est probablement parce que vous encapsulez la requête entre guillemets doubles, mais la variable est entre guillemets simples, donc elle est traitée comme un littéral, et si la colonne est int, vous obtiendrez un 0 à la place.

Essaye ça:

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

De plus, avant d'être flambé, assurez-vous de lire injection SQL au cas où vous ne nettoyez pas les variables publiées directement dans les instructions sql.

- Mise à jour -

Basé sur votre commentaire de "valeur en cours de dumping"; le nombre que vous essayez d'insérer est trop grand pour les systèmes 32 bits. Le maximum pour 32 bits est 4 294 967 295 , et le maximum pour 64 bits est 18 446 744 073 709 551 615 . Je recommanderais de convertir votre colonne en hachage varchar(100) plutôt qu'en int, ou de passer à un système 64 bits. Grand article sur les nombres maximums ici , et ici .

36
Mike Purcell

2147483647 est la plus grande valeur int pour mysql. Changez simplement le type de int en bigint.

57
George

Pendant que je jouais avec SQL et MySQL avait le même type de données MySQL int. Modification du type de données de int à bigint problème fixe.

Types entiers MySQL http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

ALTER TABLE tablename MODIFY columnname BIGINT; 
8
Lyserty

Changez simplement le type de données de INT en BIGINT

5
Ron Varghese

La plus grande valeur pour le type de données INT est 2147483647. Si le nombre que vous insérez est supérieur à 2147483647, cela provoquera le problème. Pour la solution, changez le type de données de INT en BIGINT car BIGINT a une valeur maximale de 9223372036854775807, cela pourrait résoudre votre problème. Jetez un œil à ce site: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

5
Nadeem Shakya

Le type entier ([~ # ~] int [~ # ~] est un stockage de 4 octets, vous obtenez de -2^(4*8-1)=-2147483648 à 2^(4*8-1)-1=2147483647, lorsque vous avez "- signé "drapeaux, si vous changez les drapeaux en non signé vous aurez une plage de 0 à 2^(4*8)-1. MySQL prend en charge BIGINT étant un stockage de 8 octets. Si vous essayez d'enregistrer une valeur supérieure, vous enregistrerez la valeur maximale de la plage

5
Rodney Salcedo

Acceptez le changement de type de données en BIGINT de INTEGER. Actuellement, la construction d'une application web avec node.js/sequelize le refactor ci-dessous a résolu le message de numéro de téléphone de la forme react-redux manipulé en '2147483647':

clientPhone: {
    type: DataTypes.BIGINT,
    allowNull: true
},
1
Peter Tountas

Allez dans opérations -> options de table -> changez les valeurs d'incrément au minimum ou tout ce que vous voulez incrémenter.

le gros problème de l'auto-incrémentation est qu'il commence par la dernière entrée par erreur si sa très grande valeur démarre alors le problème dans la valeur d'insertion .. avec notre type de données prédéfini
enter image description here

1
lalit mohan