当前位置:  开发笔记 > 编程语言 > 正文

常见的MySQL字段及其相应的数据类型

如何解决《常见的MySQL字段及其相应的数据类型》经验,为你挑选了4个好方法。

我正在建立一个非常小的MySQL数据库,存储,名字,姓氏,电子邮件和电话号码,我正在努力为每个字段找到"完美"的数据类型.我知道没有一个完美的答案,但必须有一些常见的常用惯例,例如这些.例如,我已经确定一个未格式化的美国电话号码太大而无法存储为unsigned int,它必须至少是一个bigint.

因为我相信其他人可能会觉得这很有用,我不想把我的问题限制在我上面提到的字段中.

哪些数据类型适用于常见数据库字段?电话号码,电子邮件和地址等字段?



1> da5id..:

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

    你不需要用它做任何算术,并且

    迟早某人会尝试(做类似的事情)在他们的区号附近加上括号.

总的来说,我似乎几乎只使用:

INT(11)用于任何ID或引用另一个ID的任何内容

时间戳的DATETIME

VARCHAR(255)保证不超过255个字符(页面标题,名称等)

TEXT几乎所有其他内容.

当然也有例外,但我发现它涵盖了大多数可能性.


再加上它是错的.比我更聪明的人告诉我,当我开始(通过数据库)只是因为看起来像一个数字并不意味着它或应该被视为这样......
盲目地使用varchar(255)是一个坏主意.至少应用一些基本的努力来猜测长度.
@Raveren:这是特定于存储引擎的 - 并且存储不是唯一的成本.排序数据和临时表(内存引擎)将使用固定数量.
@Morgan Tocker:这是最好的做法,任何低于255个字符的内容都会占用相同的空间.
@Omeid Herat是的.
此外,整数仅支持高达20亿的价值.这是2,000,000,000.当您想要存储国际电话号码时,实际上没有足够的空间,并附有国家/地区代码.我甚至没有看到你如何找到足够的空间来存储655-405-4055(6,554,054,055)这样的数字
电话号码实际上**是**数字,但仅限于文字理解.0004194821947产生与004194821947相同的整数*数字*,但它在呼叫路由机制中绝对不会以相同的方式处理.

2> yentsun..:

以下是我使用的一些常见数据类型(虽然我不是很专业):

| Column           | Data type     | Note
| ---------------- | ------------- | -------------------------------------
| id               | INTEGER       | AUTO_INCREMENT, UNSIGNED                                                          |  
| uuid             | CHAR(36)      | or CHAR(16) binary                                                                |  
| title            | VARCHAR(255)  |                                                                                   |  
| full name        | VARCHAR(70)   |                                                                                   |  
| gender           | TINYINT       | UNSIGNED                                                                          |  
| description      | TINYTEXT      | often may not be enough, use TEXT 
                                     instead          
| post body        | TEXT          |                                                                                   |  
| email            | VARCHAR(255)  |                                                                                   |  
| url              | VARCHAR(2083) | MySQL version < 5.0.3 - use TEXT                                                  |  
| salt             | CHAR(x)       | randomly generated string, usually of 
                                     fixed length (x)    
| digest (md5)     | CHAR(32)      |                                                                                   |  
| phone number     | VARCHAR(20)   |                                                                                   |  
| US zip code      | CHAR(5)       | Use CHAR(10) if you store extended 
                                     codes      
| US/Canada p.code | CHAR(6)       |                                                                                   |  
| file path        | VARCHAR(255)  |                                                                                   |  
| 5-star rating    | DECIMAL(3,2)  | UNSIGNED                                                                          |  
| price            | DECIMAL(10,2) | UNSIGNED                                                                          |  
| date (creation)  | DATE/DATETIME | usually displayed as initial date of 
                                     a post                                       |  
| date (tracking)  | TIMESTAMP     | can be used for tracking changes in a 
                                     post                                        |  
| tags, categories | TINYTEXT      | comma separated values *                                                          |  
| status           | TINYINT(1)    | 1 – published, 0 – unpublished, … You 
                                     can also use ENUM for human-readable 
                                     values
| json data        | JSON          | or LONGTEXT       


@yentsun - 电子邮件实际上只有254; 阅读[对Neil McGuigan发布的问题的评论](http://stackoverflow.com/questions/1199190/what-is-the-optimal-length-for-an-email-address-in-a-database#1199238)

3> staticsan..:

根据我的经验,名字/姓氏字段应至少为48个字符 - 来自马来西亚或印度等一些国家的名称很长.

电话号码和邮政编码应始终视为文本,而不是数字.给出的正常理由是有一些以0开头的邮政编码,在某些国家,电话号码也可以从0开头.但真正的原因是它们不是数字 - 它们是碰巧组成的标识符数字的数字(并且忽略了像加拿大这样在其邮政编码中有字母的国家).因此,将它们存储在文本字段中.

在MySQL中,您可以将VARCHAR字段用于此类信息.虽然它听起来很懒惰,但这意味着你不必太在意正确的最小尺寸.



4> nickf..:

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

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

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

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

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有