1

我有一些电话号码(经过验证,所有都只包含整数,没有-+在其中)作为文本文件中的字符串。

我正在对电话号码列为 int(12) 的 mysql 表进行简单的 mysql 更新。请注意,我使用 intval() 将从文本文件中提取的每个电话号码转换为整数。

我面临的问题是,我没有插入数字,而是将2147483647插入每列。我想我在某个地方犯了一个愚蠢的小错误,但我仍然无法弄清楚。谁能解释我犯了什么错误?

编辑:这是我正在使用的一段代码(它没有给出任何 sql 错误):

$sql="UPDATE ".$table." SET mobile = ".intval($smob).", phone = ".intval($sphone)." WHERE roll='".$sroll."'";
mysql_query($sql, $con) or die(mysql_error());
4

2 回答 2

1

手册摘录intval()

最大值取决于系统。32 位系统的最大有符号整数范围为 -2147483648 到 2147483647。例如,在这样的系统上,intval('1000000000000') 将返回 2147483647。64 位系统的最大有符号整数值为 9223372036854775807。

您得到的是 32 位机器上的有符号整数的最大数量。

我强烈建议您不要使用此功能进行电话号码转换。一个简单的原因是我的手机号码是 11 位数字(国际访问没有前导 + 或双零),我相信有些国家的数字更多。

为什么需要将电话号码存储为int's?由于您很可能没有对客户中可能拥有最大电话号码的人进行一些计算和统计,并且此数据可能仅用于发票或联系信息,因此您可以将其保留为字符串。

于 2012-06-03T17:33:57.643 回答
0

电话号码不是整数,不应使用整数类型存储。

发生观察到的行为是因为您尝试存储的值超出了列类型接受的范围。我建议将 MySQL 置于严格模式 - 这会强制它在插入的数据等无法存储时返回错误,而不是默默地尝试做任何最不坏的事情而不会失败。

于 2012-06-03T18:40:11.457 回答