在使用MySQL创建数据表时,经常会遇到如何为字段选择合适的数据类型的问题,接下来我们一起分析字符串、数值、日期数据类型的选择。
1、CHAR与VARCHAR
CHAR和VARCHAR类型,都用来存储字符串,但它们被存储和检索的方式不同。它们的最大长度以及是否保留尾部空格也不同。CHAR属于固定长度的字符类型,而VARCHAR属于可变长度的字符类型。
下表将各种字符串值存储到 CHAR(4)和VARCHAR(4) 列后的结果,从而说明了CHAR和VARCHAR之间的区别。并且在查询数据时CHAR列会删除尾部的空格。
CHAR与VARCHAR
建议:
在存储定长字符时推荐使用CHAR,在存储列是不定长时字符推荐使用合适长的VARCHAR。
在使用CHAR和VARCHAR时,后面跟的数字为满足需要的最小值。
2、BLOB和TEXT类型
BLOB是一个二进制大对象,TEXT是一个的文本大对象。BLOB和 TEXT分别包括TINYBLOB,BLOB, MEDIUMBLOB,LONGBLOB和TINYTEXT,TEXT, MEDIUMTEXT,LONGTEXT四种不同的类型。它们之间的区别主要是存储文本长度和存储字节个数的不同。
建议:
对于存在TEXT或BLOB列的表,查询数据是应避免查询这些字段。
如果可以的话应该把BLOB或TEXT列分离到单独的表中,以提升数据处理性能。
3、定点类型与浮点类型
定点类型,DECIMAL类型的存储精确的数值数据。当对精确度要求很高时,例如金额数据,应使用定点类型。MySQL DECIMAL以二进制格式存储值。
浮点类型,FLOAT和DOUBLE类型代表近似值数据。FLOAT单精度需要四个字节存储,DOUBLE双精度需要八个字节存储。
4、日期和时间数据类型
MySQL提供常用的日期和时间数据类型有 DATE, TIME, DATETIME, TIMESTAMP,和 YEAR。每个时间类型都有一个有效值范围,以及一个“ 零 ”值。
从下表可以看出每种类型的“ 零 ”值的格式。
“零”值的格式