使用哪种数据类型来存储手机号码

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 或空格。为了进行比较,我们可以从表达式的两边删除所有特殊字符。

【讨论】:

以上是关于使用哪种数据类型来存储手机号码的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 数据库,我应该使用啥数据类型来存储护照号码?

mysql 里面用啥数据类型来定义手机号码?

应该使用哪种数据类型来存储哈希?

我应该收集和存储信用卡的类型(例如 Visa)还是通过号码来确定?

数据存储——手机外部文件存储

如何在 Django 模型中存储电话号码?