Sta*_*bie 77 mysql string int formatting database-design
可能重复:
telephne号码和地址的mysql数据类型
有关在电子邮件中存储电话号码的最佳做法的建议吗?考虑一下美国电话号码:
我应该删除格式并仅存储数字吗?我应该只使用一个字段 - 或将它们分成:国家代码,区号,电话号码等?建议?
gbn*_*gbn 152
And*_*and 29
您永远不应该使用格式存储值.应根据用户首选项在视图中进行格式化.
搜索混合格式的手机nunbers几乎是不可能的.
对于这种情况,我将拆分为字段并存储为整数.数字比文本更快并且分割它们并且将索引放在它们上使得所有类型的查询都快速运行.
领先0可能是一个问题,但可能不是.在瑞典,所有区号都以0开头,如果拨打国家代码,也会删除.但是0并不是数字的一部分,它是一个指示器,用于表示我正在添加区号.对于国家/地区代码,您添加00表示您使用县代码.
不应存储前导0,应在需要时添加它们.假设您将00存储在数据库中,并且您使用的服务器仅适用于+,您必须将+替换为该应用程序的00.
所以,将数字存储为数字.
Ste*_*uts 12
我建议将数字存储在varchar中而不进行格式化.然后,您可以恰当地重新格式化客户端上的数字.有些文化喜欢用不同的电话编号; 在法国,他们写的电话号码是01-22-33-44-55.
您可能还会考虑为电话号码所在的国家/地区存储另一个字段,因为根据您查看的数字很难确定.英国使用11位数的长数,一些非洲国家使用7位数的长数.
也就是说,我曾经为一家英国电话公司工作,我们根据英国或国际电话号码将电话号码存储在我们的数据库中.因此,英国的电话号码为02081234123,国际电话号码为001800300300.
我建议对电话号码使用 varchar (因为已知电话号码有前导 0,保留这一点很重要)并将电话号码放在两个字段中:
国家代码和电话号码,即004477789787您可以存储 CountryCode=44 和电话号码=77789787
然而,它可能是非常特定于应用的。例如,如果您只存储美国号码并希望保持快速执行查询(例如“获取特定区域的所有号码”)的能力,那么您可以进一步拆分电话号码字段(并删除国家/地区代码字段,因为它会是这样)多余的)
我不认为这样做有一个普遍的正确和错误的方法。这实际上取决于需求。