49

Alright, so I've been toying around with the Steam Web API, I have one of the values stored in a variable called $steam64. When I use this code snipper to INSERT it into a mysql database it insert a completley different integer than what is stored in the variable.

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

var_dump($steam64); returns the real int, so does echoing it. Not too sure what is going on here, any help is appreciated.

Archey
  • 1,312
  • 5
  • 15
  • 21
  • 3
    What *is* inserted (and what *was* dumped) and what *is* the column type? It's likely not a "bug" in MySQL, which means the problem lies elsewhere... –  Apr 21 '12 at 02:44
  • shouldn't need the single quotes on an integer. it may be trying to insert the string '$steam64' as an integer, converting it in the process. – Lazerblade Apr 21 '12 at 02:47
  • @pst `2147483647` is being inserted, `76561197989628470` is being dumped, column type is int(255). – Archey Apr 21 '12 at 02:55
  • @Lazerblade just having it `VALUES ($steam64)` still inserts the wrong int. – Archey Apr 21 '12 at 02:56
  • http://dev.mysql.com/doc/refman/5.5/en/integer-types.html – Eugine Joseph Jul 31 '14 at 07:13

11 Answers11

71

2147483647 is the largest int value for mysql. Just change the type from int to bigint.

George
  • 6,006
  • 6
  • 48
  • 68
  • 1
    It's worth noting that BIGINT has a limit of -9223372036854775808 to 9223372036854775807 (signed) or 0 to 18446744073709551615 (unsigned). if you want the larget POSITIVE ONLY integer then use something like `COLUMNNAME` BIGINT(32) UNSIGNED DEFAULT 0 – Lewis May 17 '17 at 18:14
42

Based on your comment of "value being dumped"; the number you are trying to insert is too large for 32-bit systems. The max for 32-bit is 4,294,967,295, and the max for 64-bit is 18,446,744,073,709,551,615. I'd recommend converting your column into a varchar(100) hash rather than an int, or switch to a 64 bit system. Great article about max ints here, and here.


Also, before I get flamed, be sure to read up on SQL injection in case you are not sanitizing variables being posted directly into sql statements.

miken32
  • 42,008
  • 16
  • 111
  • 154
Mike Purcell
  • 19,847
  • 10
  • 52
  • 89
11

While I was playing with SQL and MySQL had the same problem MySQL int data type. Modifying data type from int to bigint fixed issue.

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

ALTER TABLE tablename MODIFY columnname BIGINT; 
Abdulla Nilam
  • 36,589
  • 17
  • 64
  • 85
Lyserty
  • 335
  • 4
  • 14
9

Simply Change the data type from INT to BIGINT

Ron Varghese
  • 136
  • 1
  • 4
7

The largest value for data type INT is 2147483647. If the number you're inserting is bigger than 2147483647, then it will cause the problem. For solution, change the data type from INT to BIGINT as BIGINT has a maximum value of 9223372036854775807, it might solve your problem. Have a look at this site: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

Nadeem Shakya
  • 126
  • 1
  • 3
5

The integer type INT is 4Bytes storage, you get from -2^(4*8-1)=-2147483648 to 2^(4*8-1)-1=2147483647, when you have "signed" flags, if you change the flags to unsigned you will have a range from 0 to 2^(4*8)-1 . MySQL support BIGINT being 8Bytes storage. If you try save a value greater, you will save the max value of the range

Rodney Salcedo
  • 1,228
  • 19
  • 23
1

Go to operations-> table options -> change increment values to minimum or whatever you want to increment..

the big problem of autoincrement is it's start from last entry by mistake if its very large value then start problem in insert value.. with our predefined datatype
enter image description here

lalit mohan
  • 193
  • 1
  • 12
1

Agree with the datatype change to BIGINT from INTEGER. Currently building a web app with node.js/sequelize the below refactor solved the phone number post from react-redux form manipulated to '2147483647':

clientPhone: {
    type: DataTypes.BIGINT,
    allowNull: true
},
HDJEMAI
  • 9,436
  • 46
  • 67
  • 93
0

I had the same problem but not with Varchar. The problem I had was that I was performing an INSERT INTO with a bad order of columns. For anyone who see this maybe is the order of cols that u are using in a subquery

Martin Muñoz
  • 436
  • 4
  • 6
-5
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;
kleopatra
  • 51,061
  • 28
  • 99
  • 211
-5

Easiest way is change in MySQL "int" to "varchar".

  • 1
    Do not do this. Never do this. VARCHAR is a string representation and not a numeric one. It would not be possible to run mathematical operations on a string. – mwieczorek Dec 10 '17 at 08:25