值作为2147483647插入到数据库中

时间:2014-02-27 22:24:42

标签: php mysql integer

我尝试输入我的数据库的所有电话号码都插入2147483647

数据库字段是integer(11)

在插入电话号码之前,它会通过以下代码删除所有空格,短划线和括号:

if (!empty($hphone)) $phone = $hphone;
else if (!empty($HomePhone)) $phone = $HomePhone;
else if (!empty($Phone1)) $phone = $Phone1;
$phone = preg_replace("/[^0-9]/", "", $phone);

为什么每次都将电话号码插入2147483647,无论电话号码是多少?

2 个答案:

答案 0 :(得分:14)

如果可以,请将电话号码转换为VARCHAR字段,不要将其存储为有符号(或无符号)数值(int,bigint,double等等)。

在这种情况下,MySQL的2147483647中签名INT的限制是导致您的问题的原因。插入此字段的任何较大的内容都将限制在该最大值。

例如电话号码555-555-5555如果大于该限制(5555555555> 2147483647),因此存储它将导致最大值2147483647.。

我还建议不要将其存储为BIG INT或任何其他数字类型。您将如何处理扩展名或特殊编码字符,如:

   +02 112020 10020  
   1-333-232-9393 x203
BTW:不知道第一个是真正的非美国数字格式,但你明白了

此外,具有相关领先0的电话号码将会丢失一些无关的数字:

 021-392-9293

号码是213929293

答案 1 :(得分:1)

如果你想将它存储为数字,请使用bigint,因为int的最大值等于2147483647。

因此,您尝试存储的高于2147483647的数字将存储为2147483647。

以下是mysql类型的一些参考:

http://dev.mysql.com/doc/refman/5.0/en/integer-types.html