整数不正确(2147483647)被插入MySQL?

好吧,我一直在Steam Web API上玩耍,我有一个存储在$steam64variables中的值。 当我使用这个代码snipper把它插入mysql数据库时,它插入一个完全不同于存储在variables中的整数。

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

var_dump($steam64); 返回真正的int,所以不会回应它。 不太确定这里发生了什么,任何帮助表示赞赏。

这可能是因为你用双引号包装了查询,但是variables是用单引号括起来的,所以把它当作一个文字来对待,如果这个列是int,那么你会得到一个0。

尝试这个:

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

另外,在我发火之前,请务必阅读SQL注入,以防止将variables直接发布到sql语句中。

– 更新 –

根据您对“价值被倾销”的评论; 您尝试插入的数字对于32位系统来说太大了。 32位的最大值是4,294,967,295 ,而64位的最大值是18,446,744,073,709,551,615 。 我build议将您的列转换为varchar(100)散列而不是int,或切换到64位系统。 这里有关于max ints的文章。

2147483647是mysql的最大int值。 只要将types从int更改为bigint。

当我在玩SQL和MySQL的时候,MySQL的数据types有相同的问题。 修改数据types从intbigint固定的问题。

MySQL整数typeshttp://dev.mysql.com/doc/refman/5.7/en/integer-types.html

 ALTER TABLE tablename MODIFY columnname BIGINT; 

整数types的INT是4Bytes存储,你从-2^(4*8-1)=-2147483648得到2^(4*8-1)-1=2147483647 ,当你有“ 签名 ”的标志,如果你改变要签名的标志的范围是02^(4*8)-1 。 MySQL支持BIGINT是8Bytes存储。 如果您尝试保存更大的值,则会保存范围的最大值

转到操作 – >表格选项 – >将增量值更改为最小或任何你想增加..

自动增量的大问题是,如果它的非常大的值然后开始插入值的问题,就会从错误的最后一个入口开始。用我们预定义的数据types
在这里输入图像描述

同意将数据types更改为INTEGER中的BIGINT。 目前正在用node.js构build一个web应用程序/ sequelize下面的重构解决了电话号码post从react-reduxforms操纵到'2147483647':

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

数据typesINT的最大值是2147483647.如果插入的数字大于2147483647,则会导致此问题。 对于解决scheme,将数据types从INT更改为BIGINT,因为BIGINT的最大值为9223372036854775807,它可能会解决您的问题。 看看这个网站: https : //dev.mysql.com/doc/refman/5.7/en/integer-types.html

最简单的方法是将MySQL“int”更改为“varchar”。

 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;