常见的MySQL字段及其适当的数据types
我正在build立一个非常小的MySQL数据库,它存储了名字,姓氏,电子邮件和电话号码,并且正努力为每个字段find“完美的”数据types。 我知道不存在这样一个完美的答案,但是对于这些常用领域必须有一些共同的约定。 例如,我确定一个未格式化的美国电话号码太大,无法存储为无符号整数,它必须至less是一个bigint。
因为我相信其他人可能会觉得这有用,我不想限制我的问题,只是我上面提到的领域。
哪些数据types适用于公共数据库字段? 电话号码,电子邮件和地址等字段?
有人会发布一个比这更好的答案,但只是想表明,我个人决不会在任何types的整数字段中存储电话号码,主要是因为:
- 你不需要做任何的算术运算
- 迟早会有人试图(做类似的事情)在他们的地区代码周围放上括号。
一般来说,我似乎几乎完全使用:
- 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),不能为空。
希望这可以帮助!