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

Arc*_*hey 36 php mysql insert steam-web-api

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

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

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

Geo*_*rge 57

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


Mik*_*ell 36

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

试试这个:

$sql_query = "INSERT INTO users_info (steam64) VALUES ('" . $steam64 . "')";
Run Code Online (Sandbox Code Playgroud)

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

- 更新 -

基于您对"倾销价值"的评论; 您尝试插入的数字对于32位系统来说太大了.32位的最大值为4,294,967,295,64位的最大值为18,446,744,073,709,551,615.我建议将列转换为varchar(100)哈希而不是int,或者切换到64位系统.约最多文章INTS 这里,并在这里.

  • 发布更新.您要插入的数字太大了. (2认同)

小智 9

虽然我玩SQL和MySQL有同样的问题MySQL int数据类型.修改数据类型从intbigint修复问题.

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

ALTER TABLE tablename MODIFY columnname BIGINT; 
Run Code Online (Sandbox Code Playgroud)


Rod*_*edo 5

整数类型INT为4字节存储空间,从-2^(4*8-1)=-21474836482^(4*8-1)-1=2147483647,当您具有“ 签名 ”标志时,如果将标志更改为无符号,则范围为02^(4*8)-1。MySQL支持BIGINT为8Bytes存储。如果您尝试保存更大的值,则将保存范围的最大值


小智 5

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


小智 5

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