在创建数据表的时候,定义字段值的时候,最纠结的莫过于选择哪个数据类型,char型还是varchar类型?确定类型后,又要纠结于给定多少长度呢?是(4)还是(50)? 存在这种问题莫过于对数据类型的一些特性还不了解,不能根据自己的需要选择合适的数据类型和长度,这样也能够优化查询,提高效率。
INTEGER、SMALLINT、DECIMAL、NUMERICAL、BIT、INT等
常用:int(4) 注意括号中的4和能表示的数值大小没有关系,因为int这个类型就决定了它可以存储的数值大小。4只是表示数值的位数。 默认情况下是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查询时候,%不要放置最前,这样索引不会被使用。
新闻热点
疑难解答