电话号码应该是字符串还是某种能够保存电话号码的数字类型?

时间:2017-02-15 17:02:49

标签: c# sql phone-number telephony

我们要存储10位数的手机号码,即9999999999。它应该是数字还是字符串数据类型?我们不想对此进行任何计算或操作操作

哪种内存和性能更好?

4 个答案:

答案 0 :(得分:27)

ITU-T recommendation E.164表示国家/地区代码需要3位数字,国家拨号计划中的目录号码最多需要15位数。

并且,许多人添加了一些标点符号。例如:

+1.212.555.1212是北美数字。它也可以渲染 (212)555-1212以北美为中心的应用程序。

32个字符的文字应该在全世界范围内起作用。

请勿使用数字,否则您会感到抱歉。我是:两件事。

  • 因为我们假设所有电话号码都是NANP-compliant十位数字而丢失了一家公司的欧洲业务。
  • 电子表格导出以科学记数法2.12555E+09呈现数字这几乎和SIRI告诉我你有两个bllion,一亿二千五百万...... 的电话一样愚蠢。。 LI>

电话号码不是数字数据类型。请看一下:Falsehoods Programmers Believe About Telephone Numbers

答案 1 :(得分:3)

必须是string,因为电话号码将超过int甚至long的限制。因此,为了处理这些情况,string始终是首选。

答案 2 :(得分:2)

有两点需要牢记:

通常,您不打算进行计算的数字应以字符串形式存储。 如果您需要数字以零开头(因为有些电话号码确实需要这样做),那么这是必不可少的。

Ergo,即使(或何时)您可以将电话号码存储为一个巨大的整数(您可以使用64位整数),也不应这样做。一旦数字从零开始,您将丢失数据。

存储电话号码时,请记住,国家/地区代码是一种特殊的信息类型。如果将其与其余号码分开存放,则将是最好的选择。这样,您可以轻松按国家/地区查询电话号码,并且无需多次解析号码(在存储号码之前,而不是每次获取号码时)。 另外,如果您将电话号码与国家/地区代码一起存储,则需要验证该内容以确保始终存储国家/地区代码,因为如果两个国家/地区的两个数字相同,则可能会相同一个有国家代码,另一个没有国家代码。

还请记住,标点符号是一种表示方法,因此与存储数据的方式无关。 您始终可以选择以所需的方式显示数据,并且在任何情况下所需的方式都取决于许多因素。例如,您要呈现什么样的数据,向谁呈现,甚至在某些情况下甚至在何时呈现数据。 如果是电话号码,则应将其存储为字符串,且不带标点符号。

我建议您看看Google的库,该库用于解析,格式化和验证国际电话号码(https://github.com/googlei18n/libphonenumber)。您可以在此库中输入您的电话号码和国家/地区代码,它将为您提供许多有用的信息,例如该号码是否可能和有效,它属于哪个地区,它是哪种号码等等。

专业提示I :为您的用户提供一种选择号码所属国家/地区的方法,而不必让他们键入国家/地区代码。对您和用户都更好。

专业提示II :很少有“以北美为中心的应用程序”或“在此处插入区域为中心的应用程序”之类的东西,尤其是如果您的应用程序可以在网络上找到的话。它确实发生了,但很少见,因此明智的做法是为世界准备应用程序,而不是一小部分。

答案 3 :(得分:-1)

您可以使用“ ulong”存储长整数值。并读取特定的值或电话号码,可以使用“ Convert.ToUInt64(Console.ReadLine());”