因此,这将是今年的虚拟问题,但我需要问,因为这不是我第一次通过这个问题。请看下表定义:
看一看列from_number
,它现在是一个VARCHAR(45)
,但是它将保存一个电话号码。因为我不知道一部手机在世界各地可能有多少号码,所以我试图覆盖几乎所有的号码。我希望尽可能保持数据库的完整性,所以我认为VARCHAR
不是保存这类信息的合适类型--也许您告诉我,我错了--所以我正在考虑改为INT
,甚至是BIGINT
。
当我在Workbench中定义列时,我应该指定括号之间的数字,()
不是在所有情况下,而是在前面提到的那些情况下,我必须这样做。因此,如果我这样做:BIGINT()
,我得到了这个错误:
这将引导我阅读一些关于MySQL类型这里的内容。基本的信息是:
一个大整数。..。无符号范围为0到18446744073709551615。
这让我不禁要问:在定义BIGINT()
类型时,应该为括号设置什么值。(我之所以使用BIGINT,是因为我不知道INT是否能像手机上的号码一样多--也许我也错了)。在MariaDB/MySQL数据库中创建列的正确方法是哪种?
不管怎样,我想知道你的意见和经验,当然我想得到一个答案。
注意:我正在使用MySQL工作台最新版本来创建ER图。我也使用MariaDB 10.0.x
发布于 2015-12-24 19:19:56
你如何处理一个电话号码的分机,如“+1,000,000-0000分机1234”?
注:"+“表示应适用国际拨号规则;因此,在北美,系统会在国际电话前自动知道"011”,等等。
另外,电话号码,如“1-800DBA-帮助”呢?
我通常会将电话号码存储为文本。话虽如此,这确实取决于您的电话号码栏有多重要。如果您正在运行该列中的自动拨号程序,那么您确实希望确保只包含数字,并且数据表示格式良好的电话号码。
您可以有单独的扩展列和有文本的电话号码,例如我提供的“1-800-DBA-帮助”示例。
发布于 2015-12-26 21:00:38
以前是这样写的:
“使用MariaDB,您可以使用computed
字段仅提取自动拨号程序的数字,也可以用于MySQL 5.7。”
在回答OP关于这一点的问题(“你能解释一下你告诉我什么吗?”)时,这里有一个解释。
许多数据库系统现在都引入了这一特性。这些字段被称为"computed
“、"virtual
”或"generated
“,它们来自于其他字段中的值。此功能的功能将根据您的RDBMS而有所不同。我知道甲骨文、火鸟、MariaDB和现在的MySQL 5.7都拥有它们。其他人可能也会这么做。
一个简单的例子是有一个姓列和一个计算列,其中“存储”(记住,它们可以是虚拟的-即动态计算,或者可以物理地存储在磁盘上)姓氏作为所有大写字母,从而使搜索变得更容易。这样,您只需在CAP
s上搜索(比如使用LIKE
),因为您知道在computed
|virtual
|generated
字段中搜索的数据是大写文本。
MySQL 5.7的概念被解释为这里和这里。它在MariaDB中的使用时间更长,这里也解释了这一概念。一些可能的用途是建议的这里,但你实际上只是受到你的想象力的限制。它们可以被看作是触发器的一种方便(且不容易出错)的替代品。
对于特定的用例,您可以从文本字段"+“-> "00”(或您的国际拨号代码是什么)推导出一个可拨的号码。这只是个想法。
发布于 2017-05-01 20:24:58
嗯。电话号码是由号码组成的。使用varchar允许用户存储任何类型的格式,包括(或不存储)。它很快就会给你的数据造成混乱。一个电话#格式是“国家”依赖的,面具应该系在国家。扩展是一个扩展,是可选的,因此它应该存储在一个“扩展字段”中。(int也)。对于1-800-DBA-帮助,我会在飞行中转换它并存储实际数字。如果您真的需要这些人类可读的电话#,将其存储在单独的varchar字段中。
https://dba.stackexchange.com/questions/124546
复制相似问题