整数类型
不同类型的整数类型的字节数不同。根据类型所占的字节数可以算出该类型的取值范围。例如TINYINT的空间为1个字节,1个字节是8位。那么TINYINT无符号数的最大值为2^8 - 1,即为255。TINYINT有符号数的最大值为2^7 - 1,即为127。同理可以推算出其他不同整数类型的取值范围。
MySQL支持数据类型的后面指定该类型的显示宽度。基本形式为: 数据类型(显示宽度),例如 TINYINT(4)。
如果没有设置显示宽度,都为默认值。TINYINT类型的默认显示宽度为4;SMALLINT类型的默认显示宽度为6;MEDIUMINT类型的默认显示宽度为9;INT类型的默认显示宽度为11;BIGINT类型的默认显示宽度为20。
在整数类型使用时,还可以搭配使用zerofill参数。zerofill参数表示数字不足的显示空间由0来填补。值得注意的是,使用zerofill参数时,MySQL会自动加上UNSIGNED属性。那么,该整数类型只能表示无符号数,其显示宽度比默认宽度小1。
当插入数据的显示宽度大于设置的显示宽度时,数据依然可以插入,而且可以完整的显示出来,设置的显示宽度在显示该记录时会失效。
注意:数据的宽度不能大于默认宽度。如果大于默认宽度,那该数据已经超过了该类型的最大值。因为最大值的宽度必须是小于等于默认宽度。如果一个值大于了这个类型的最大值,那么这个值是不可能插入的。
整数类型还有一个AUTO_INCREMENT属性,该属性可以使字段成为自增字段。
浮点数类型和定点数类型
MySQL中使用浮点数类型和定点数类型来表示小数。
MySQL中可以指定浮点数和定点数的精度,基本形式为: 数据类型(M,D)
其中数据类型参数是浮点数或定点数参数类型名称;M参数称为精度,是数据的总长度,小数点不占位置;D参数称为标度,是指小数点后的长度为D。
注意:上述指定小数精度的方法虽然都适用于浮点数和定点数,但不是浮点数的标准用法。建议在使用浮点数时,如果不是实际情况需要,最好不要适用。如果使用了,可能会影响数据库的迁移。对定点数而言,DOUBLE(M,D)是定点数的标准格式。
如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。不同的是,FLOAT型和DOUBLE型在四舍五入时不会报错,DECIMAL型会有警告。
如果不指定精度,浮点数和定点数有其默认的精度。FLOAT和DOUBLE型默认会保存实际精度,但这与操作系统和硬件的精度有关。DECIMAL型默认整数位为10,小数位为0,即默认为整数。
技巧:在MySQL中,定点数以字符串形式存储,因此,其精度比浮点数要高。而且,浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数比较安全。
YEAR类型
YEAR类型使用一个字节来表示年份。给YEAR类型的字段赋值的表示方法如下:
·使用4位字符串或数字表示。其范围从1901~2155,输入格式为'YYYY'或YYYY。
·使用2位字符串表示。'00'~'69'转换为2000~2069;'70'-'99'转换为1970~1999。
注意:使用YEAR类型时一定要注意0和'0'的区分。如果向YEAR类型的字段插入0,存入该字段的年份是0000;如果向YEAR字段插入的是'0',存入的年份是2000,'00'和'0'是一样的效果。
TIME类型
TIME类型使用3个字节来表示时间。MySQL中以HH:MM:SS的形式来显示TIME类型的值。TIME类型的范围从'-838:59:59'~'838:59:59'。使用CURRENTIME或NOW()来输入当前系统时间。
DATE类型
DATE类型用四个字节来表示日期。MySQL中是以YYYY-MM-DD的形式显示 DATE类型的值。其中,YYYY表示年;MM表示月;DD表示日。DATE类型的范围可 以从‘1000-01-01’~‘9999-12-31’。使用CURRENT_DATE或NOW()来输入当前系统日期。
DATETIME类型
DATETIME类型使用8个字节来表示日期和时间。MySQL中以‘YYYY-MM-DD HH:MM:SS’的形式显示DATETIME类型的值。从其形式可以看出,DATETIME类型可 以直接用DATE类型和TIME类型组合而成。使用NOW()来输入当前系统日期和时间。
TIMESTAMP
TIMESTAMP类型使用4个字节来表示日期和时间。TIMESTAMP类型的范围是从 1970-01-01 08:00:01~2038-01-19 11:14:07。MySQL 中也是以‘YYYY-MM-DD HH:MM:SS' 的形式显示TIMESTAMP类型的值。从其形式可以看出,TIMESTAMP类型与DATETIME 类型显示的格式是一样的。
TIMESTAMP类型还有一个很大的特殊点,就是时间是根据时区来显示的。例如,在东八区插入的TIMESTAMP类型为2009-09-30 ]4:21:25。在东七区显示时,时间部分就变成了 13:21:25。在东九区显示时,时间部分就变成了 15:21:25。需要显示日期与时间,TIMESTAMP类型能够根据不同地区的时区来转换时间。但是,TIMESTAMP类型的范围太小。其最大时间为2038-01-19 11:14:07。如果插入的时间 比这个大,将会出错。例如,输入2038-01-19 11:14:08,系统会出现“ERROR1292(22007): tocorrect datetime value: '2038-01-19 11:15:08' for column 'a' at row 1 ”这样的错误提示。因此,若需要的时间范围比较大,还是选择DATETIME类型比较安全。