MySQL中插入了不正确的整数(2147483647)?

时间:2012-04-21 02:42:54

标签: php mysql insert steam-web-api

好吧,所以我一直在使用Steam Web API,我有一个存储在名为$steam64的变量中的值。当我使用这个代码片段将它插入到mysql数据库中时,它会插入一个完整的不同整数,而不是存储在变量中的整数。

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

var_dump($steam64);返回真正的int,所以回显它。不太清楚这里发生了什么,感谢任何帮助。

10 个答案:

答案 0 :(得分:55)

2147483647是mysql的最大int值。只需将类型从int更改为bigint。

答案 1 :(得分:36)

这可能是因为你用双引号包装查询,但变量是单引号,所以它被视为文字,如果列是int,你将得到0。

试试这个:

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

此外,在我受到抨击之前,请务必阅读SQL injection,以防您没有清理直接发布到sql语句中的变量。

- 更新 -

基于您对“倾销价值”的评论;您尝试插入的数字对于32位系统来说太大了。 32位的最大值为 4,294,967,295 ,64位的最大值为 18,446,744,073,709,551,615 。我建议将列转换为varchar(100)哈希而不是int,或切换到64位系统。关于最大整数herehere精彩文章。

答案 2 :(得分:6)

当我玩SQL和MySQL时,MySQL int数据类型有同样的问题。 将数据类型从 int 修改为 bigint 修复了问题。

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

ALTER TABLE tablename MODIFY columnname BIGINT; 

答案 3 :(得分:5)

只需将数据类型从INT更改为BIGINT

答案 4 :(得分:4)

整数类型 INT 是4Bytes存储,当您拥有" 已签名时,您将从-2^(4*8-1)=-2147483648转到2^(4*8-1)-1=2147483647 34;标记,如果您将标记更改为无符号,则范围从02^(4*8)-1。 MySQL支持BIGINT为8Bytes存储。如果尝试保存更大的值,则将保存范围的最大值

答案 5 :(得分:4)

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

答案 6 :(得分:1)

转到操作 - >表格选项 - >将增量值更改为最小值或任何您想要增加的值。

自动增量的一个大问题是它是从错误的最后一次输入开始的,如果其非常大的值然后在插入值中启动问题...使用我们预定义的数据类型
enter image description here

答案 7 :(得分:1)

同意数据类型从INTEGER更改为BIGINT。目前正在构建一个带有node.js / sequelize的web应用程序,下面的重构解决了来自react-redux表单的电话号码帖子被操纵到' 2147483647':

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

答案 8 :(得分:-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;

答案 9 :(得分:-5)

最简单的方法是改变MySQL" int" to" varchar"。