常见的MySQL字段及其适当的数据types

我正在build立一个非常小的MySQL数据库,它存储了名字,姓氏,电子邮件和电话号码,并且正努力为每个字段find“完美的”数据types。 我知道不存在这样一个完美的答案,但是对于这些常用领域必须有一些共同的约定。 例如,我确定一个未格式化的美国电话号码太大,无法存储为无符号整数,它必须至less是一个bigint。

因为我相信其他人可能会觉得这有用,我不想限制我的问题,只是我上面提到的领域。

哪些数据types适用于公共数据库字段? 电话号码,电子邮件和地址等字段?

有人会发布一个比这更好的答案,但只是想表明,我个人决不会在任何types的整数字段中存储电话号码,主要是因为:

  1. 你不需要做任何的算术运算
  2. 迟早会有人试图(做类似的事情)在他们的地区代码周围放上括号。

一般来说,我似乎几乎完全使用:

  • INT(11)用于标识ID或引用另一个ID的任何内容
  • DATETIME时间戳
  • VARCHAR(255)保证在255个字符以内(页面标题,名称等)
  • 几乎所有其他的文字。

当然也有例外,但是我发现它涵盖了大多数事件。

下面是我使用的一些常见的数据types(虽然我并不是很多):

  • VARCHAR(254)用于电子邮件
  • TIMESTAMP用于date,跟踪创build或更改
  • DECIMAL(3,2)(无符号)用于5星评级值
  • VARCHAR(255)的文件名
  • TINYTEXT的描述

UPD :我收集了一些表中的一些常见字段: http : //korinets.name/mysql-common-data-types.html

根据我的经验,名字/姓氏字段应该至less有48个字符 – 有些国家(如马来西亚或印度)的名字是完整的。

电话号码和邮编,你应该总是把文字,而不是数字。 给出的正常原因是邮政编码以0开头,而在某些国家,电话号码也可以从0开始。但真正的原因是它们不是数字 – 它们是恰好被编制的标识符的数字(这是无视像加拿大邮政编码有字母的国家)。 因此将它们存储在文本字段中。

在MySQL中,您可以使用VARCHAR字段来处理这种types的信息。 虽然听起来很懒,但这意味着你不必太在意太小的尺寸。

由于你将要处理的variables长度(名称,电子邮件地址)的数据,那么你会想要使用VARCHAR。 VARCHAR字段占用的空间量是[field length] + 1个字节,最大长度为255,所以我不用太担心试图find一个完美的大小。 看看你想象的可能是最长的长度,然后加倍,并将其设置为VARCHAR限制。 那说…:

我通常将电子邮件字段设置为VARCHAR(100) – 我还没有提出一个问题。 名称我设置为VARCHAR(50)。

正如其他人所说,电话号码和邮政编码实际上不是数字值,它们是包含数字0-9(有时更多!)的string,因此您应该将它们视为string。 VARCHAR(20)应该足够好。

请注意,如果要将电话号码存储为整数,许多系统都会假设以0开头的数字是八进制数(基数为8)! 因此,完全有效的电话号码“0731602412”将作为十进制数字“124192010”放入您的数据库!

我正在做同样的事情,这就是我所做的。

我使用名称,地址,电子邮件和数字的单独表格,每个表格都有一个NameID列,除了名称表(在其上是主键)之外,它们都是外键。 我使用MainName和FirstName而不是LastName和FirstName来允许商业条目以及个人条目,但是您可能没有这个必要。

NameID列在所有表中都是smallint,因为我相当肯定我不会超过32000个条目。 几乎所有的东西都是varchar(n),范围从20到200,取决于你想要存储的东西(生日,评论,电子邮件,真正的长名字)。 这真的取决于你正在存储什么样的东西。

Numbers表是我偏离的地方。 我将其设置为具有五个名为NameID,Phone#,CountryCode,Extension和PhoneType的列。 我已经讨论了NameID。 电话号码是varchar(12)与检查约束看起来像这样:CHECK(Phone#like'[0-9] [0-9] [0-9] – [0-9] [0-9] [0 -9] – [0-9] [0-9] [0-9] [0-9]“)。 这确保只有我想要的东西进入数据库,数据保持非常一致。 扩展名和国家代码我称为可空smallint,但如果你想这些可以是varchar。 PhoneType是varchar(20),不能为空。

希望这可以帮助!