一尘不染

数据类型:VARCHAR、INT 还是 BIGINT?

mysql

所以这将是今年的虚拟问题,但我需要问一下,因为这不是我第一次遇到这个问题。看一下下表定义:

在此处输入图像描述

看看现在的列from_numberVARCHAR(45)但它将包含一个电话号码。由于我不知道一部手机可以在全世界拥有多少个号码,所以我试图覆盖几乎所有的号码。我想尽可能地保持数据库的完整性,所以我认为VARCHAR不是保存此类信息的合适类型 - 你告诉我,也许我错了 - 所以我正在考虑更改INTBIGINT.

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

在此处输入图像描述

指导我在这里阅读一些关于这种 MySQL 类型的信息。基本上信息是这样的:

一个大整数。… 无符号范围是 0 到 18446744073709551615。

这让我问:当我定义一个BIGINT()类型时,我应该为括号设置什么值。(我使用 BIGINT 是因为我不知道 INT 是否可以容纳与电话一样多的数字——也许我也错了)。在 MariaDB/MySQL 数据库中创建|设计列的正确方法是什么?

无论如何,我想知道您的意见,经验,当然我想得到答案

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


阅读 57

收藏
2022-10-17

共1个答案

一尘不染

您将如何处理带有分机的电话号码,例如“+1-000-000-0000 ext 1234”?

注意,“+”表示应使用国际拨号规则;所以来自北美,系统在国际电话前自动知道“011”等。

另外,诸如“1-800-DBA-HELP”之类的电话号码呢?

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

您可以为分机和带有文本的电话号码设置单独的列,例如我提供的“1-800-DBA-HELP”示例。

2022-10-17