Mysql 如何在SQL中将电话号码存储为整数?

Mysql 如何在SQL中将电话号码存储为整数?,mysql,Mysql,在MySQL中,我使用以下代码构建了一个表: BUILD TABLE user ( userName char(25) NOT NULL PRIMARY KEY, firstName char(25) NOT NULL, lastName char(25) NOT NULL, userEmail char(25) NOT NULL, userPhone int(10) NOT NULL, ); 假设我发出以下命令: INSERT INTO `user`(

在MySQL中,我使用以下代码构建了一个表:

BUILD TABLE user
(
    userName char(25) NOT NULL PRIMARY KEY,
    firstName char(25) NOT NULL,
    lastName char(25) NOT NULL,
    userEmail char(25) NOT NULL,
    userPhone int(10) NOT NULL,
);
假设我发出以下命令:

INSERT INTO `user`(`userName`, `firstName`, `lastName`, `userEmail`, `userPhone`) 
VALUES ("JDoe","John","Doe","jdoe@nothing.net", 9725550145)
MySQL毫无问题地运行该命令,并将信息放入表中。然而,当我检索到John Doe的信息时,他的电话号码是2147483647

在一些条目中,我注意到,如果他们的区号的第一个数字大于2,那么他们会得到相同的数字。我做错了什么,我如何修复这个问题,使每个人都有自己的电话号码,而不是MySQL分配给他们的这个看似随机的值


非常感谢。

将您的列
userPhone int(10)NOT NULL
更改为
userPhone BIGINT NOT NULL

如果需要更改列类型,以下是命令:

ALTER TABLE user MODIFY userPhone BIGINT NOT NULL;
还需要花些时间阅读MySql文档上的数字类型


正如评论中指出的,您不应该使用数字类型来存储电话号码,因为有些号码的前导是0,如果将其存储为号码,您将丢失此信息。由@GolezTrol和@GordonLinoff指出,不要这样做,电话号码不是整数有很好的理由:

  • 前导零:
    0199857514
  • 国家代码:
    +34199857514
  • 特殊命令:
    992514
  • sip电话:
    sip:01199857514@stackoverflow.net
如果要将电话号码存储为整数,那么以后会有很大的限制和问题


要回答您的问题:您不能将电话号码存储为整数,必须使用字符串。

不要。电话号码不是整数。例如,我的电话号码是0612345678。0非常重要,但将其存储在整数字段中会导致该信息丢失。请将电话号码存储为字符串,而不是整数。一个电话号码可能看起来像一个号码,但你不想对它进行数字转换。@GordonLinoff谢谢,但它不是我的电话号码,虽然我的电话号码以06开头。就我个人而言,我会(而且会)按照它提供的方式存储电话号码,并将其格式化后存储在一个单独的列中。这样的话,我两者都能做到最好。虽然这是真的,但它已经在评论中提到了,因为它没有回答问题。不可能将电话号码存储为整数。这个问题无关紧要。我同意@GuillaumeF的观点。我们在这里解决问题,不仅仅是回答问题。因此,他的答案比我的答案要好得多。他问,“how”,这意味着一种方法,然后他特别说,
我如何解决这个问题,使每个人都有自己的电话号码,而不是MySQL分配给他们的这个看似随机的值?
,@guillaume F。然后他解释了他做错了什么,但从不回答“how”,那么怎么做呢?@Eduardo:好吧,如果你愿意的话,我认为这是显而易见的,但我在答案中加了“你必须使用字符串”。