[关闭]
@a5635268 2015-09-23T10:11:23.000000Z 字数 5822 阅读 1499

【mysql的设计与优化专题(3)】字段类型与合理的选择字段类型

Mysql


本篇博客稍微有点长,它实际上包括两个内容:一是mysql字段类型的介绍,二是在mysql建表过程中是如何正确选择这些字段类型;

字段类型

数值

MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。
许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。

为什么mysql存储的值要分有符号和无符号呢?因为一个字节,占8bit;也就1个bit有0和1两种可能,8个bit就是2^8 = 256种可能,也就是0~255;但如果是有符号的话,就得拿一个1bit来存储这个负号,本来8bit只剩7bit,2^7 = 128,也就是-128~127(正数部分包含一个0);

关于flaot和double
在这里我建议,干脆忘记mysql有double这个数据类型。至于why?就不要管它了

字符串类型

MySQL 提供了 8 个基本的字符串类型,可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。

  1. SELECT BINARY 'ABCD' = 'abcd' as COM1,'ABCD' = 'abcd' as COM2; -- COM1输出为0,COM2输出为1;

时间类型

在处理日期和时间类型的值时,MySQL 带有 5 个不同的数据类型可供选择。

如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。

复合类型

MySQL 还支持两种复合数据类型 ENUM 和 SET,它们扩展了 SQL 规范。虽然这些类型在技术上是字符串类型,但是可以被视为不同的数据类型。一个 ENUM 类型只允许从一个集合中取得一个值;而 SET 类型允许从一个集合中取得任意多个值。

字段类型总结

  1. 虽然上面列出了很多字段类型,但最常用也就是 varchar(255),char(255),text,tinyint(4),smallint(6),mediumint,int(11)几种。
  2. 复合类型我们一般用tinyint,更快的时间更省的空间以及更容易扩展
  3. 关于手机号,推荐用char(11),char(11)在查询上更有效率,因为手机号是一个活跃字段参与逻辑会很多。
  4. 一些常用字段举例
    姓名:char(20)
    价格:DECIMAL(7, 3)
    产品序列号:SMALLINT(5) unsigned
    文章内容: TEXT
    MD5: CHAR(32)
    ip: char(15)
    time: int(10)
    email char(32)

合理的选择数据类型

但是,工作中随着项目越做越多,业务逻辑的处理越来越难以后,我发现时间类型还是用时间类型本身的字段类型要好一些,因为mysql有着丰富的时间函数供我使用,方便我完成很多与时间相关的逻辑,比如月排行榜,周排行榜,当日热门,生日多少天等等逻辑

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注