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

时间:2015-11-27 19:17:22

标签: 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`(`userName`, `firstName`, `lastName`, `userEmail`, `userPhone`) 
VALUES ("JDoe","John","Doe","jdoe@nothing.net", 9725550145)

MySQL运行命令没有问题,并将信息放在表中。但是,当我检索所述John Doe的信息时,他的电话号码显示为2147483647。

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

谢天谢地。

2 个答案:

答案 0 :(得分:8)

不要这样做,电话号码整数有很好的理由:

  • 领先的零:0199857514
  • 国家/地区代码:+34199857514
  • 特殊命令:#992,514
  • 啜饮手机:sip:01199857514@stackoverflow.net

如果您要将手机号码存储为整数,则以后会遇到重大限制和问题。

要回答您的问题:您不能将电话号码存储为整数。

答案 1 :(得分:3)

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

如果您需要更改列类型,请执行以下命令:

ALTER TABLE user MODIFY userPhone BIGINT NOT NULL;

另请花点时间阅读MySql docs上的数字类型

http://dev.mysql.com/doc/refman/5.7/en/numeric-types.html

正如评论中所指出的,你不应该使用数字类型来存储电话号码,因为有前导0的数字,如果它存储为数字,你将失去这些信息。由@GolezTrol和@GordonLinoff指出