mysql数据类型,用于电话号码和地址

Dyl*_*SUN 48 mysql types phone-number street-address

我想在表格中输入电话号码,包括国家代码,分机号码

create table if not exists employee(    `   
      country_code_tel   int(11),
      tel_number         int(10),
      extension          int(10),
      mobile             bigint(20)
);
Run Code Online (Sandbox Code Playgroud)

如果tel_number大于15位,我可以使用哪种数据类型,我最好使用Bigint(20)

create table address(
      address           varchar(255),  
      city              varchar(255),
      country           varchar(255),
      post_code         int(11)
);
Run Code Online (Sandbox Code Playgroud)

例如,如果我有加拿大的国家代码,我可以使用+2或002.哪种处理更好?

谢谢你的建议.

o.k*_*k.w 66

好吧,我个人不使用数值数据类型来存储电话号码或相关信息.

你怎么存储一个数字说001234567?它最终会以1234567结束,失去领先的零.

当然,你总是可以把它填上,但是这可以让你确切地知道这个数字应该是多少位数.

这不能回答你的整个帖子,
只是我的2美分

  • http://img.thedailywtf.com/images/12/q2/err6/pic3.png几乎证明了一切 (8认同)

Vin*_*nie 47

实际上你可以使用varchar作为电话号码.您不需要int,因为您不会对数字执行算术运算.

  • @ garcon1986:验证 - (不是'身份验证') - 必须在应用程序之前在您的应用程序上完成.你可能更喜欢用一个valitation PL程序编写一个SQL触发器来生活在数据库中 - 这将更难,但如果你的数据库数据被不同的人用不同编程语言编写的前端应用程序所取代,那就是你要走的路, - 但您不应该依赖数据库数据类型进行验证 (4认同)
  • @ garcon1986完全没问题.无需道歉......这就是该网站存在的原因 (3认同)
  • @ garcon1986 varchar比int更容易验证.我所知道的每个真实项目都使用varchar而不是thasn int作为电话领域.即使验证库也需要字符. (2认同)

Dan*_*lly 31

并将其作为两个字段的电话号码-一个"数字"和"面具"的TinyText类型不需要超过255项.

在我们存储文件之前,我们解析电话号码以获取已使用的格式并创建掩码,然后我们仅将数字存储为数字,例如

输入: (0123) 456 7890
数字:01234567890
面具: (nnnn)_nnn_nnnn

从理论上讲,这允许我们在Number字段上执行比较搜索,例如获取以特定区号开头的所有电话号码,而不必担心用户输入的是什么


小智 24

我通常将电话号码存储为E164格式的BIGINT.

E164永远不会以0开头,前几位是国家代码.

+441234567890
+44 (0)1234 567890
01234 567890
Run Code Online (Sandbox Code Playgroud)

等等将被存储为441234567890.

  • 知道[E164是什么]是有用的(http://en.wikipedia.org/wiki/E.164) (2认同)

kon*_*kon 7

我会使用varchar作为电话号码.这样你也可以存储+和(),有时可以在电话号码中看到(正如你自己提到的).而且您不必担心使用整数中的所有位.


nfe*_*ner 5

我不确定使用整数是否是个好主意.某些数字可能包含特殊字符(例如,#作为扩展名的一部分),您也应该能够处理它们.所以我建议改用varchars.