12

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

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

4

4 回答 4

14
  • varchar/char 的长度足以满足所有预期(例如英国数字为 11 长)
  • 检查约束以仅允许数字(表达式 = NOT LIKE '%[^0-9]%'
  • 每个区域设置的客户端格式(英国 = 07123 456 789,瑞士 = 071 234 56 78
于 2011-06-01T07:35:51.293 回答
12

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

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

于 2011-06-01T07:51:21.787 回答
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

于 2011-06-01T07:32:02.510 回答
-1

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

于 2017-05-26T06:23:42.453 回答