【问题标题】:which datatype to use to store a mobile number使用哪种数据类型来存储手机号码
【发布时间】:2011-09-06 01:28:50
【问题描述】:

我应该使用哪种数据类型来存储 10 位数的手机号码(例如:9932234242)。我应该选择 varchar(10) 还是选择大的 - “bigint”。

如果数字是类型- '0021-23141231' ,那么使用哪种数据类型?

【问题讨论】:

    标签: sql-server-2005 sql-server-2008 sql-server-express sqldatatypes


    【解决方案1】:
    • varchar/char 的长度足以满足所有预期(例如英国数字为 11 长)
    • 检查约束以仅允许数字(表达式 = NOT LIKE '%[^0-9]%'
    • 按区域设置的客户端格式(英国 = 07123 456 789,瑞士 = 071 234 56 78

    【讨论】:

      【解决方案2】:

      正如其他人已经回答的那样,对于恰好由数字组成但数学运算没有意义的数据使用 varchar。

      此外,在您的示例编号中,您是否考虑过将002123141231 存储到bigint 列中会发生什么?检索后,它将是 2123141231,即数字列无法存储前导 0 数字...

      【讨论】:

      • 很好的答案。确实不会对电话号码进行任何计算:P
      【解决方案3】:

      使用带有检查约束的varchar 以确保只允许数字。

      类似这样的:

      create table MyTable
      (
          PhoneNumber varchar(10)
              constraint CK_MyTable_PhoneNumber check (PhoneNumber like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
      )
      

      如果它总是相同的长度,您可能希望使用char

      【讨论】:

      • 你的检查约束只允许 10 个数字,所以你还是使用一个字符。
      • @ck - 我同意。虽然,这个约束只是一个例子。
      【解决方案4】:

      varchar(50) 适用于手机号码数据类型。因为它有时可能包含国家代码,例如 +91 或空格。为了进行比较,我们可以从表达式的两边删除所有特殊字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-06
        • 2019-01-08
        • 1970-01-01
        • 2023-01-28
        • 1970-01-01
        • 2011-06-06
        相关资源
        最近更新 更多