首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电话号码数据类型: VARCHAR,INT还是BIGINT?

电话号码数据类型: VARCHAR,INT还是BIGINT?
EN

Database Administration用户
提问于 2015-12-24 18:58:39
回答 4查看 122.5K关注 0票数 13

因此,这将是今年的虚拟问题,但我需要问,因为这不是我第一次通过这个问题。请看下表定义:

看一看列from_number,它现在是一个VARCHAR(45),但是它将保存一个电话号码。因为我不知道一部手机在世界各地可能有多少号码,所以我试图覆盖几乎所有的号码。我希望尽可能保持数据库的完整性,所以我认为VARCHAR不是保存这类信息的合适类型--也许您告诉我,我错了--所以我正在考虑改为INT,甚至是BIGINT

当我在Workbench中定义列时,我应该指定括号之间的数字,()不是在所有情况下,而是在前面提到的那些情况下,我必须这样做。因此,如果我这样做:BIGINT(),我得到了这个错误:

这将引导我阅读一些关于MySQL类型这里的内容。基本的信息是:

一个大整数。..。无符号范围为0到18446744073709551615。

这让我不禁要问:在定义BIGINT()类型时,应该为括号设置什么值。(我之所以使用BIGINT,是因为我不知道INT是否能像手机上的号码一样多--也许我也错了)。在MariaDB/MySQL数据库中创建列的正确方法是哪种?

不管怎样,我想知道你的意见和经验,当然我想得到一个答案。

注意:我正在使用MySQL工作台最新版本来创建ER图。我也使用MariaDB 10.0.x

EN

回答 4

Database Administration用户

回答已采纳

发布于 2015-12-24 19:19:56

你如何处理一个电话号码的分机,如“+1,000,000-0000分机1234”?

注:"+“表示应适用国际拨号规则;因此,在北美,系统会在国际电话前自动知道"011”,等等。

另外,电话号码,如“1-800DBA-帮助”呢?

我通常会将电话号码存储为文本。话虽如此,这确实取决于您的电话号码栏有多重要。如果您正在运行该列中的自动拨号程序,那么您确实希望确保只包含数字,并且数据表示格式良好的电话号码。

您可以有单独的扩展列和有文本的电话号码,例如我提供的“1-800-DBA-帮助”示例。

票数 15
EN

Database Administration用户

发布于 2015-12-26 21:00:38

以前是这样写的:

“使用MariaDB,您可以使用computed字段仅提取自动拨号程序的数字,也可以用于MySQL 5.7。”

在回答OP关于这一点的问题(“你能解释一下你告诉我什么吗?”)时,这里有一个解释。

许多数据库系统现在都引入了这一特性。这些字段被称为"computed“、"virtual”或"generated“,它们来自于其他字段中的值。此功能的功能将根据您的RDBMS而有所不同。我知道甲骨文、火鸟、MariaDB和现在的MySQL 5.7都拥有它们。其他人可能也会这么做。

一个简单的例子是有一个姓列和一个计算列,其中“存储”(记住,它们可以是虚拟的-即动态计算,或者可以物理地存储在磁盘上)姓氏作为所有大写字母,从而使搜索变得更容易。这样,您只需在CAPs上搜索(比如使用LIKE),因为您知道在computed|virtual|generated字段中搜索的数据是大写文本。

MySQL 5.7的概念被解释为这里这里。它在MariaDB中的使用时间更长,这里也解释了这一概念。一些可能的用途是建议的这里,但你实际上只是受到你的想象力的限制。它们可以被看作是触发器的一种方便(且不容易出错)的替代品。

对于特定的用例,您可以从文本字段"+“-> "00”(或您的国际拨号代码是什么)推导出一个可拨的号码。这只是个想法。

票数 2
EN

Database Administration用户

发布于 2017-05-01 20:24:58

嗯。电话号码是由号码组成的。使用varchar允许用户存储任何类型的格式,包括(或不存储)。它很快就会给你的数据造成混乱。一个电话#格式是“国家”依赖的,面具应该系在国家。扩展是一个扩展,是可选的,因此它应该存储在一个“扩展字段”中。(int也)。对于1-800-DBA-帮助,我会在飞行中转换它并存储实际数字。如果您真的需要这些人类可读的电话#,将其存储在单独的varchar字段中。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/124546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档