好吧,所以我一直在使用Steam Web API,我有一个存储在名为$steam64
的变量中的值。当我使用这个代码片段将它插入到mysql数据库中时,它会插入一个完整的不同整数,而不是存储在变量中的整数。
$sql_query = "INSERT INTO users_info (steam64) VALUES ('$steam64')";
var_dump($steam64);
返回真正的int,所以回显它。不太清楚这里发生了什么,感谢任何帮助。
答案 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位系统。关于最大整数here和here的精彩文章。
答案 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;标记,如果您将标记更改为无符号,则范围从0
到2^(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)
转到操作 - >表格选项 - >将增量值更改为最小值或任何您想要增加的值。
自动增量的一个大问题是它是从错误的最后一次输入开始的,如果其非常大的值然后在插入值中启动问题...使用我们预定义的数据类型
答案 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"。