MYSQL目前的数据类型
数字类型
时间日期类型
字符串类型
如何进行数据类型优化
宗旨:MYSQL的数据类型很多,但有几点原则对于选择是非常关键的
- 更小的通常更好 :更小的数据类型一般更快,占用的存储,cpu等资源少
- 简单就好 :采用最合适的类型,例如时间存储使用MYSQL自带的时间类型,而不是字符串类型
- 尽量避免使用NULL :null值对索引的使用比较不友好,在设定为索引的列上,最好设为 NOT NULL
整数类型
整数类型有TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 5种类型。
- 这5种类型都可以存储正,负整数,并通过UNSIGNED属性来选择。选择UNSIGNED后,大致可以使正数的存储范围提高一倍,因为存储空间是固定好的。
- MYSQL可以为整数类型指定宽度。比如INT(1)和INT(20),其存储的值是一样的,只是在交互工具上显示出不同的效果而已。
- 整数计算中,MYSQL默认转化为BIGINT
实数类型
实数类型有float(单精度浮点型),double(双精度浮点型),decimal(定点型) 3种类型
- 3种实数类型均可以指定精度,指定方式为类型名称后加(M,D),其中M代表总长度,D代表小数点后的长度。
- 3种类型不指定精度的情况下,float和double按照实际精度存储,decimal则默认整数10,小数0
- 浮点类型的运算会造成误差,所以在MYSQL中进行精确的小数计算的话,应该是有decimal,或者交给上层应用解决
字符串类型
CHAR 和 VARCHAR
- 表示方式均为char(M)或varchar(M),其中M表示最大存储长度
- char是定长,varchar不定长表现在插入一个长度小于M的字符串a,char(M)的还是占用M个字符,而varchar(M)则只占用a个长度的字符、
- 字符串是定长的情况下,char比varchar好。varchar需要额外的1-2个字符来记录字符串的长度
- 对于经常变更的短数据或定长数据,使用char更好
- char在存储的时候会将右侧空格进行剔除,保留左侧空格。varchar在存储的时候保留所有空格,不进行任何删除。varchar和char在查询的时候都只会根据where条件中的左侧空格进行判断,右侧末尾的空格会忽略
BLOB 和 TEXT
- 这两个类型,均是为了存储大字符量的
- BLOB采用二进制方式存储 , TEXT 采用字符串形式存储
时间日期类型
DATE,TIME,YEAR
-DATE : 日期 YYYY-MM-DD -TIME : 时间 HH:mm:ss -YEAR : 年份 YYYY
DATETIME 和 TIMESTAMP
- 这两者都是日期,时间混合类型
- DATETIME(1001到9999,8字节存储),TIMSTAMP(1970-2038,4字节存储)
- DATETIME不会根据时区变化,TIMESTAMP会根据时区变化
- TIMESTAMP 在插入后有特殊的属性,NULL时为最新时间
标识符的选择
- 整数类型是作为标识符最好的选择,并且可以使用auto_increment
- ENUM he SET ,这两种类型通常是不好的选择