使用哪种数据类型来存储手机号码
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 数据库,我应该使用啥数据类型来存储护照号码?