php Intero errato(2147483647) è inserito in MySQL?




insert steam-web-api (8)

Concordare con la modifica del tipo di dati su BIGINT da INTEGER. Attualmente la creazione di un'app Web con node.js / sequelize il refactore in basso ha risolto il numero di telefono dal modulo react-redux manipolato a '2147483647':

clientPhone: {
    type: DataTypes.BIGINT,
    allowNull: true
},

Bene, quindi ho giocato con l'API di Steam Web, ho uno dei valori memorizzati in una variabile chiamata $steam64 . Quando uso questo snipper di codice per INSERIRE in un database mysql, inserisce un numero intero completamente diverso da quello che è memorizzato nella variabile.

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

var_dump($steam64); restituisce il vero int, quindi lo fa eco. Non sono sicuro di cosa sta succedendo qui, ogni aiuto è apprezzato.



Answer #2
CREATE TABLE `dvouchers` (
  `2147483647` int(3) NOT NULL auto_increment,
  `code` varchar(12) NOT NULL default '1',
  `type` char(1) NOT NULL default '$',
  `count` int(3) unsigned NOT NULL default '0',
  `amount` int(3) unsigned default '0',
  `notes` text,
  `expiryDate` date default NULL,
  `fkUserAdminId` int(11) NOT NULL default '0',
  PRIMARY KEY  (`2147483647`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Answer #3

Il valore più grande per il tipo di dati INT è 2147483647. Se il numero che si sta inserendo è maggiore di 2147483647, causerà il problema. Per soluzione, modificare il tipo di dati da INT a BIGINT poiché BIGINT ha un valore massimo di 9223372036854775807, potrebbe risolvere il problema. Dai un'occhiata a questo sito: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html


Answer #4

Vai a operazioni-> opzioni tabella -> modifica i valori di incremento al minimo o qualsiasi altra cosa si desidera incrementare ..

il grosso problema dell'autoincremento è che si inizia dall'ultimo ingresso per errore se il suo valore molto grande inizia quindi il problema nel valore inserito .. con il nostro tipo di dati predefinito


Answer #5

2147483647 è il più grande valore int per mysql. Basta cambiare il tipo da int a bigint.


Answer #6

Probabilmente è perché la query viene racchiusa tra virgolette doppie, ma la variabile è racchiusa tra virgolette singole, quindi viene trattata come un valore letterale e, se la colonna è int, verrà visualizzato uno 0.

Prova questo:

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

Inoltre, prima che diventi fiammeggiante, assicurati di leggere su SQL injection nel caso in cui tu non stia disinfettando le variabili che vengono pubblicate direttamente nelle istruzioni SQL.

-- Aggiornare --

In base al tuo commento su "valore scaricato"; il numero che stai cercando di inserire è troppo grande per i sistemi a 32 bit. Il massimo per 32 bit è 4.294.967.295 e il massimo per 64 bit è 18.446.744.073,709,551,615 . Ti consigliamo di convertire la colonna in un hash varchar(100) anziché in un int, o passare a un sistema a 64 bit. Ottimo articolo su max ints here , e here .


Answer #7

Il numero intero INT è 4Byte di memoria, ottieni da -2^(4*8-1)=-2147483648 a 2^(4*8-1)-1=2147483647 , quando hai " firmato " contrassegni, se cambi le flag a unsigned avranno un intervallo da 0 a 2^(4*8)-1 . Il supporto MySQL BIGINT è uno storage da 8 byte. Se si tenta di salvare un valore maggiore, si salverà il valore massimo dell'intervallo





steam-web-api