在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运行命令没有问题,并将信息放在表中。然而,当我检索上述无名氏的信息时,他的电话号码显示为2147483647。
在一些条目中,我注意到如果他们的区号的第一个数字大于2,那么他们得到相同的数字。我做错了什么,我该如何修复这个问题,以便每个人都有自己的电话号码,而不是MySQL分配给他们的这个看似随机的值?
非常感谢。
3条答案
按热度按时间vbopmzt11#
不要这样做,电话号码是而不是整数,理由很充分:
0199857514
+34199857514
#992,514
sip:01199857514@stackoverflow.net
如果你打算将电话号码存储为整数,那么你以后会遇到很大的限制和问题。
q3aa05252#
将列
userPhone int(10) NOT NULL
更改为userPhone BIGINT NOT NULL
如果您需要更改列类型,请使用以下命令:
另外,花点时间阅读MySql文档中的数字类型
http://dev.mysql.com/doc/refman/5.7/en/numeric-types.html
正如在评论中指出的那样,你不应该使用数字类型来存储电话号码,因为有一些电话号码以0开头,如果它被存储为一个数字,你将丢失这些信息。由@GolezTrol和@GordonLinoff指出
xghobddn3#
尽管Guillame完全错误的答案已经被接受了九年,电话号码可以而且应该被存储为数字。
他举的反例没有一个是正确的。
首先,回应他关于电话号码不能存储在号码中的说法:
1.电话命令不是电话号码的一部分。你不妨试着在他们的邮寄地址中照顾一个不和谐的句柄。数据库不携带替代数据集。
1.国际国家代码中没有加号。是的,欧洲人就是这么写的,但是把你的手机拿出来,试着拨加号。让我知道当你弄清楚如何,并发送给我一些指示,请。电话号码中也没有破折号或括号。只有数字。
1.当然,你不应该在你的电话号码栏中存储SIP电子邮件地址。那不是电话号码。
1.电话号码没有前导零。Guillame可能不知道这一点,但这是一个国家的呼叫命令。如果你去了另一个国家,你就不必再拨它了,即使电话号码没有改变。因此,它实际上不是电话号码的一部分。所以,举个例子,如果我从德国给我的加拿大朋友打电话,我必须先拨零。但如果我从加拿大、美国、墨西哥或法国打电话给他们,我就不必这样做了。为什么?因为电话号码***从定义上来说从来不会以零***开头。唯一的例外是美国/加拿大呼叫前缀到操作员。这是一百多年前建立这个系统的国际电话系统协议的一部分。
所以。
为什么要这么做?
好吧。
为了正确地完成这项工作,您必须删除国家控制代码,因为它不是电话号码的一部分,并且在不同的国家工作方式不同
您不应该在电话号码列中存储不属于电话号码的内容,例如PBX命令和SIP电子邮件地址
电话号码***应***存储为数字