如何在MySQL数据库上存储电话号码?

如何在MySQL数据库上存储电话号码?,mysql,string,database-design,formatting,int,Mysql,String,Database Design,Formatting,Int,可能重复: 关于在数据库中存储电话号码的最佳实践有什么建议吗?考虑一下美国的电话号码: 555551212 555-555-1212 (555)5551212 55551212 1-555-555-1212 1(555)555-1212 等等 我应该删除格式并只存储数字吗?我应该只使用一个字段,还是将它们分为:国家代码、区号、电话号码等。?建议?我建议将数字存储在varchar中而不格式化。然后,您可以在客户端适当地重新格式化数字。有些文化倾向于以不同的方式书写电话号码;在法国,他们写的电

可能重复:

关于在数据库中存储电话号码的最佳实践有什么建议吗?考虑一下美国的电话号码:

  • 555551212
  • 555-555-1212
  • (555)5551212
  • 55551212
  • 1-555-555-1212
  • 1(555)555-1212
  • 等等

我应该删除格式并只存储数字吗?我应该只使用一个字段,还是将它们分为:国家代码、区号、电话号码等。?建议?

我建议将数字存储在varchar中而不格式化。然后,您可以在客户端适当地重新格式化数字。有些文化倾向于以不同的方式书写电话号码;在法国,他们写的电话号码像01-22-33-44-55

<>你也可以考虑为电话号码所在的国家存储另一个字段,因为这很难根据你所看到的数字来计算。英国使用11位长数字,一些非洲国家使用7位长数字


也就是说,我曾经在一家英国电话公司工作,我们根据电话号码是英国的还是国际的在数据库中存储电话号码。因此,英国电话号码为02081234123,国际电话号码为001800300300。

您可以使用varchar存储电话号码,因此无需删除格式设置

我建议将这些号码存储在varchar类型的列中-每个“字段”一列(如contry code等)

与用户交互时应应用该格式。。。例如,这样可以更容易地考虑格式更改,尤其是当您的应用程序走向国际时……

  • 都是varchar(它们不是数字,而是“数字的集合”)
  • 国家+地区+数字分开
  • 并非所有国家都有区号(如我所在的马耳他)
  • 一些国家在拨打内部电话时,将区号的前导零删除(如英国)
  • 客户端代码中的格式

我会说,将它们存储为一个大整数,因为电话号码本身就是一个数字。这也为您以后如何显示电话号码提供了更大的灵活性,具体取决于您所处的情况。

从我的角度来看,以下是我的建议:

  • 将电话号码作为varchar存储到单个字段中,如果需要拆分,则在相应地检索拆分后
  • 如果存储为number,则前面的0将被截断,因此始终存储为varchar
  • 在插入表之前验证用户的电话号码

  • 您不应使用格式存储值。应根据用户偏好在视图中进行格式化

    搜索具有混合格式的电话号码几乎是不可能的

    对于这种情况,我将拆分为字段并存储为整数。数字比文本快,拆分它们并在其上添加索引可以使各种查询运行得更快

    前导0可能是个问题,但可能不是。在瑞典,所有区号都以0开头,如果同时拨打国家代码,则该区号将被删除。但是0实际上并不是数字的一部分,它是一个用来告诉我正在添加区号的指示器。国家代码也一样,添加00表示使用县代码

    不应存储前导0,应在需要时添加它们。假设您将00存储在数据库中,并且您使用的服务器仅与+一起工作,那么对于该应用程序,您必须将00替换为+


    所以,将数字存储为数字。

    我肯定会将它们拆分。按区号和区号对号码进行排序是很容易的。但即使您不打算拆分,也只需将数字以一种特定格式插入数据库。e、 g.1-555-555-1212您的客户端将感谢您没有重新格式化您的电话号码。

    varchar,不要存储分隔字符。您可能希望根据不同的用途对电话号码进行不同的格式化。因此,将(619)123-4567存储为6191234567我处理电话号码簿数据,并发现这是最佳做法。

    建议您将号码存储为扩展字母数字格式,由您希望接受的字符组成,并将其存储在varchar(32)或类似的格式中。去掉所有空格、破折号等。将电话号码的格式放在单独的字段中(可能从区域设置首选项中收集),如果您希望支持扩展,则应将其添加到单独的字段中

    我建议使用varchar作为电话号码(因为已知电话号码的前导0必须保留),并将电话号码放在两个字段中:

    国家代码和电话号码,即对于004477789787您可以存储国家代码=44和电话号码=77789787

    但是,它可能非常特定于应用程序。例如,如果您只存储美国号码,并且希望保持快速执行查询(如“从特定区域获取所有号码”)的能力,则您可以进一步拆分电话号码字段(并删除国家代码字段,因为这是多余的)


    我不认为有一个普遍的正确和错误的方式来做这件事。这真的取决于需求。

    CHAR(255)会更好,对吗?您是否建议将整个数字放在一个字段中?还是把他们分开?如果分开,你建议我怎么做?我们使用了VARCHAR(20)。我们为世界上每个国家存储数字,20是公司的标准。255似乎比我建议的要大得多,尤其是对于静态字段格式。上面的补充:即,如果您没有存储扩展或其他扩展信息。但是,如果您存储的是扩展信息,那么无论如何您都应该将其放在另一个字段中;因为在进行比较之前,您必须先转换它们。因此,请将电话号码分为国家代码、区号、实际号码和分机号码