MySQL 提供了大量的数据类型,为了优化存储、提高数据库性能,在任何情况下均应使用最精确的类型,即在所有可以表示改列值的类型中,该类型使用的存储最小。
1. 整数和浮点数
如果不需要小数部分,就使用整数来保存数据;如果需要表示小数部分,就使用浮点数类型。浮点类型包括FLOAT和DOUBLE类型。DOUBLE类型精度比FLOAT类型高,因此要求存储精度较高时应选择DOUBLE类型。
2. 浮点数和定点数
浮点数相对定点数的优势是:在长度一定的情况下,浮点数能表示更大的数据范围。由于浮点数容易产生误差,因此对精度要求比较高时,建议使用DECIMAL来存储。
3. 日期与时间类型
MySQL对于不同种类的日期和时间有很多数据类型,只需要记录年份,使用YEAR类型即可;如果只记录时间则使用TIME类型。
同时记录日期和时间,可以使用TIMESTAMP或者DATETIME类型。由于TIMESTAMP列的取值范围小于DATETIME的取值范围,因此存储范围比较大的日期最好使用DATETIME。
TIMESTAMP也有一个DATETIME不具备的属性,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前时间。另外TIMESTAMP在空间上比DATETIME更有效。
4. CHAR 与VARCHAR之间的特点与选择
CHAR和VARCHAR的区别如下:
CHAR是固定长度字符,VARCHAR是可变长度字符。
CHAR会自动删除插入数据的尾部空格,VARCHAR不会删除尾部空格。
CHAR是固定长度,所以它的处理速度比VARCHAR的速度更快,但是它的缺点是浪费存储空间,所以对存储不大但是速度上有要求的可以使用CHAR类型,反之可以使用VARCHAR类型来实现。
存储引擎对于选择CHAR和VARCHAR的影响:
对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间。
对于InnoDB存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用CHAR不一定比使用VARCHAR更好,但是由于VARCHAR是按照实际的长度存储的,比较节省空间,所以对磁盘I/O和数据存储总量比较好。
5. ENUM和SET
ENUM只能取单值,它的数据列表是一个枚举集合。
SET可取多值。它的合法取值列表最多允许64个成员。
6. BLOB和TEXT
BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息。BLOB存储图片、音频信息等,而TEXT只能存储纯文本文件。
-- end