将不正确的整数(2147483647)插入到 MySQL 中?
Posted
技术标签:
【中文标题】将不正确的整数(2147483647)插入到 MySQL 中?【英文标题】:Incorrect Integer (2147483647) is inserted into MySQL? 【发布时间】:2012-05-02 14:23:20 【问题描述】:好的,所以我一直在玩弄 Steam Web API,我将其中一个值存储在一个名为 $steam64
的变量中。当我使用此代码剪辑器将其插入 mysql 数据库时,它会插入一个与变量中存储的完全不同的整数。
$sql_query = "INSERT INTO users_info (steam64) VALUES ('$steam64')";
var_dump($steam64);
返回真正的 int,回显它也是如此。不太清楚这里发生了什么,感谢任何帮助。
【问题讨论】:
插入了什么(以及被转储了什么)以及是的列类型是什么?这可能不是 MySQL 中的“错误”,这意味着问题出在其他地方...... 整数上不需要单引号。它可能会尝试将字符串 '$steam64' 作为整数插入,并在此过程中进行转换。 @pst2147483647
正在插入,76561197989628470
正在转储,列类型为 int(255)。
@Lazerblade 只是拥有它VALUES ($steam64)
仍然会插入错误的 int。
dev.mysql.com/doc/refman/5.5/en/integer-types.html
【参考方案1】:
基于您对“价值被倾销”的评论;您尝试插入的数字对于 32 位系统来说太大了。 32 位的最大值为 4,294,967,295,64 位的最大值为 18,446,744,073,709,551,615。我建议将您的列转换为 varchar(100)
哈希而不是 int,或者切换到 64 位系统。 很棒的文章关于最大整数 here 和 here。
另外,在我被激怒之前,请务必阅读SQL injection,以防您不清理直接发布到 sql 语句中的变量。
【讨论】:
已发布更新。您尝试插入的数字太大。 谢谢 :) 是 php 还是 MySQL 有限制? 这是一个系统限制,因此任何试图访问这么大数字的应用都会导致意外行为。 好吧,快速提问,如果我想要一个带有类似于 76561197980000000 的变量的 for 循环,这可能吗? 可以,只要不是 int。【参考方案2】:只需将数据类型从 INT 更改为 BIGINT
【讨论】:
【参考方案3】:数据类型 INT 的最大值是 2147483647。如果您插入的数字大于 2147483647,则会导致问题。 对于解决方案,将数据类型从 INT 更改为 BIGINT,因为 BIGINT 的最大值为 9223372036854775807,它可能会解决您的问题。 看看这个网站: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html
【讨论】:
【参考方案4】:同意将数据类型从 INTEGER 更改为 BIGINT。目前正在使用 node.js/sequelize 构建一个 Web 应用程序,以下重构解决了从 react-redux 表单操作到“2147483647”的电话号码帖子:
clientPhone:
type: DataTypes.BIGINT,
allowNull: true
,
【讨论】:
【参考方案5】:当我在玩 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;
【讨论】:
【参考方案6】:最简单的方法是将 MySQL 的“int”更改为“varchar”。
【讨论】:
不要这样做。永远不要这样做。 VARCHAR 是一种字符串表示形式,而不是数字表示形式。不可能对字符串进行数学运算。【参考方案7】:整数类型INT是4Bytes存储,你从-2^(4*8-1)=-2147483648
到2^(4*8-1)-1=2147483647
,当你有“signed”标志时,如果你把标志改为未签名您将拥有从 0
到 2^(4*8)-1
的范围。 MySQL 支持 BIGINT 为 8Bytes 存储。如果您尝试保存更大的值,您将保存范围的最大值
【讨论】:
【参考方案8】:转到操作-> 表选项-> 将增量值更改为最小值或您想要增量的任何值..
自动增量的大问题是如果它的值非常大,则错误地从最后一个条目开始,然后在插入值中开始问题......使用我们预定义的数据类型
【讨论】:
【参考方案9】: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;
【讨论】:
hmm ... 这回答了这个问题,因为 ... ? 这毫无意义,如果您遇到此问题,请不要试图从这个答案中推断出任何帮助。【参考方案10】:2147483647 是 mysql 的最大 int 值。只需将类型从 int 更改为 bigint。
【讨论】:
值得注意的是,BIGINT 的限制为 -9223372036854775808 到 9223372036854775807(有符号)或 0 到 18446744073709551615(无符号)。如果您想要最大的 POSITIVE ONLY 整数,请使用COLUMNNAME
BIGINT(32) UNSIGNED DEFAULT 0以上是关于将不正确的整数(2147483647)插入到 MySQL 中?的主要内容,如果未能解决你的问题,请参考以下文章
网站 web.config > 是不是可以将不正确的子域重定向到某个页面?
运行时错误:有符号整数溢出:2147483647 + 1 不能以“int”类型表示