MySql的数据类型

来源:互联网 发布:淘宝退货卖家说我调包 编辑:程序博客网 时间:2024/05/20 17:07

在创建数据表的时候,定义字段值的时候,最纠结的莫过于选择哪个数据类型,char型还是varchar类型?确定类型后,又要纠结于给定多少长度呢?是(4)还是(50)? 存在这种问题莫过于对数据类型的一些特性还不了解,不能根据自己的需要选择合适的数据类型和长度,这样也能够优化查询,提高效率。

数值类型

INTEGER、SMALLINT、DECIMAL、NUMERICAL、BIT、INT等

常用:int(4)
注意括号中的4和能表示的数值大小没有关系,因为int这个类型就决定了它可以存储的数值大小。int一般是4个字节(bytes), 所以其大小是2147483647 (Signed) or 4294967295 (Unsigned)。 此处的
4只是表示当通过sql命令查询数据时,最终显示4位字符。在zerofill状态下,如果值假设为1,但是定义为int(4),那么查询出来后,显示是0001。

默认情况下是int(11)。

浮点型:float、double
也可以表示为float(M,D)、double(M,D)

定点型:decimal、numberic
也可以表示为decimal(M,D);
其中M表示总的数值位数(整数部分+小数部分),
D表示小数部分。例如: decimal(8, 2) 可以表示:999999.99

日期类型

DATE:
只表示年月日,不包含时分秒 ,格式为YYYY-MM-DD

TIME:
只表示时分秒,格式为 HH:MM:SS

DATETIME:
表示一个完整的时间,格式为 YYYY-MM-DD HH:MM:SS

TIMESTAMP :
常用的时间戳,表示格式为00000000000000,如果需要经常计算时间或者返回当前时间,可以使用此类型。

YEAR:
只表示年份,格式为YYYY。

字符串类型

char 和 varchar 比较:

都表示较短的字符串,主要区别在于char是固定长度的,范围在0-255,
varchar是可变长度的,范围在0-65535。 char(50),其中50表示50个字节数。比方说定义char(10)和varchar(10),插入“csdn”,那么char后面会补上6个空格,但是varchar会立马变成4。 由于char是固定长度的,方便程序的查找和存储,所以char类型的查询更快,主要是以空间换时间。
对于char和varchar的选择,根据数据量大小,以及对查询效率的要求来进行选择。一般如果长度变化不大,且查询效率要求高的,一般使用char。但是MySQL的升级,对varchar的效率逐渐在优化,如果数据量很大的情况下,使用varchar至少可以减少存储空间,较少读取数据时的磁盘IO次数。

其他数据类型

enum: 顾名思义枚举类型。最多65535个成员。

举例:create table t (gender enum(‘M’,’F’));
其中表示gender列是枚举类型,范围是M或者F。
在插入记录的时候,只能选择M或者F中一个,不区分大小写,在数据库中会统一转成大写,如果插入范围之外的值,会抛出异常。可以在表中插入NULL,也可以插入枚举值对应的元素顺序,比方说第一个枚举值对应1,如此下去。

SET: 也是一个集合。有多个元素,每次可以插入所有元素的若干子集。

TEXT: 只能保存字符数据(character),比方说:一篇文章或者日记等。

BLOB: 只能保存字节数据(byte)(二进制流),比方说图片。

TEXT和BLOB类型的列创建索引,不能直接使用整列作为索引,因为这样会让索引占据很大的内存。对于TEXT和BLOB列都是使用前缀索引,也就是列的前N个字节作为所以。
create index indexalias on tablename(column(N));

注意:使用like查询时候,%不要放置最前,这样索引不会被使用。

mysql建立表时候应该注意的

1、表中必须有的字段
id,createtime, updatetime ; 字段的id 、创建时间和更新时间。

2、对于字段为is_xxx,表示是或者否的时候,由于mysql不支持boolean类型,所以使用的是0 或者1 来表示。字符类型定义为 tinyint

3、表示时间的字段
mysql支持的时间类型有:
DATETIME、 TIMESTAMP、DATE、TIME、YEAR。

这里写图片描述

DATETIME :
用于表示 年-月-日 时-分-秒 是 DATA 和 TIME的组合,表示的时间范围比较长,从1001年到9999年。占用空间最大为8个字节。

TIMESTAMP
用于表示 年-月-日 时-分-秒 ,但是表示的范围比较小,从1970年到2038年,占用空间为4个字节,并且表示值和时区相关,DATATIME和时区是无关的。插入时间时,会转成本地时区时间再存放。查询时间的时候,也会转成本地时区再显示,所以不同时区的人看到的结果是不一样的。如果插入的数据中没有给定时期,那么会默认往数据库中插入当前时间,CURRENT_TIMESTAMP.

如果系统在不同时区使用,一般设定为TIMESTAMP的格式。

createtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP .

0 0
原创粉丝点击