整数不正确(2147483647)被插入MySQL?
好吧,我一直在Steam Web API上玩耍,我有一个存储在$steam64
variables中的值。 当我使用这个代码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从int到bigint固定的问题。
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
,当你有“ 签名 ”的标志,如果你改变要签名的标志的范围是0
到2^(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;