MySql数据库中字段数据类型详解(1/2)
MySQL中的列类型有三种:数值类、字符串类和日期/时间类。
从大类来看列类型和数值类型一样,都是只有三种。但每种列类型都还可细分。
下面对各种列类型进行详细介绍。
数值类的数据列类型
字段类型:
TINYINT:1字节非常小的正整数,带符号:-128~127,不带符号:0~255
SMALLINT:2字节小整数,带符号:-32768~32767,不带符号:0~65535
MEDIUMINT:3字节中等大小的整数,带符号:-8388608~8388607,不带符号:0~16777215
INT:4字节标准整数,带符号:-2147483648~2147483647,不带符号:0~4294967295
BIGINT:8字节大整数,带符号:-9223372036854775808~9233372036854775807,不带符号:0~18446744073709551615
FLOAT:4字节单精度浮点数,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38
DOUBLE:8字节双精度浮点数,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308
DECIMAL:M+2字节 以字符串形式表示的浮点数,它的取值范围可变,由M和D的值决定。
注意:带符号的意思就是可以用负号,可以通过设置UNSIGNED来改变。
声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)还是会占用4个字节的存储空间。
所以,这个长度只是显示的长度,用于显示数据用的。没有其他任何作用。
给字段指定ZEROFILL是补全的意思,这样上面设置的INT(3)显示长度就起作用了,如1就显示为001,另外它自动帮我们设置成UNSIGNED属性,也就是不能为负。
主键:给字段设置主键,主要是标示该字段的唯一性,说明这个字段的内容不能重复,如果是两个字段或者多个子都都设置主键则表示这些字段组合起来的数据是惟一的,是针对所有的字段的唯一性。
日期,时间型数据列类型
DATE 1000-01-01~9999-12-31 3字节(MySQL3.23版以前是4字节 ) 0000-00-00 TIME -838:59:59~838:59:59 3字节 00:00:00 DATETIME 1000-01-01 00:00:00~9999-12-31 23:59:59 8字节 0000-00-00 00:00:00 TIMESTAMP 19700101000000~2037年的某个时刻 4字节 00000000000000 YEAR YEAR(4):1901~2155 YEAR(2):1970~2069 1字节 0000
MySQL总是把日期和日期里的年份放在最前面,按年月日的顺序显示。
DATE、TIME、DATATIME数据列类型
DATE、TIME和DATATIME类型分别存放日期值、时间值、日期和时间值的组合。它们的格式分别是“CCYY-MM-DD”、“hh:mm:ss”、“CCYY-MM-DD hh:mm:ss”。
DATATIME里的时间值和TIME值是有区别的,DATATIME里的时间值代表的是几点几分,TIME值代表的是所花费的时间。当向TIME数据列插值时,需用时间的完整写法,如12分30秒要写成“00:12:30”。
TIMESTAMP数据列类型
TIMESTAMP数据列的格式是CCYYMMDDhhmmss,取值范围从19700101000000开始,即1970年1月1号,最大到2037年。它的特点是能把数据行的创建或修改时间记录下来:
如果把一个NULL值插入TIMESTAMP列,这个数据列就将自动取值为当前的日期和时间。
在创建和修改数据行时,如果没有明确对TIMESTAMP数据列进行赋值,则它就会自动取值为当前的日期和时间。如果行中有多个TIMESTAMP列,只有第一个会自动取值。
如果对TIMESTAMP设置一个确定的日期和时间值,则会使TIMESTAMP的自动取值功能失效。
TIMESTAMP默认的列宽是14,可指定列宽,以改变显示效果。但不论你指定的列宽如何,MySQL都是以4字节来存储TIMESTAMP值,也总是以14位精度来计算。
如果需要把创建时间和最近一次修改时间同时记录下来,可以用两个时间戳来记录,一个记录创建时间,一个记录修改时间。不过需记住两件事,一是要把记录修改时间的TIMESTAMP数据列放在最前面,这样才会自动取值;二是创建一条新记录时,要用now()函数来初始化创建时间TIMESTAMP数据列,这样,该TIMESTAMP数据列就不会再变化。
YEAR
YEAR是一种单字节的数据列类型,YEAR(4)的取值范围是1901~2155,YEAR(2)的取值范围是1970~2069,但只显示最后两位数。MySQL能自动把两位数字年份转换成四位数字的年份,如97和14分被转换成1997和2014。转换规则是这样的:
年份值00~69将被转换成2000~2069;
年份值70~99将被转换成1970~1999。
00被转换成0000,而不是2000。因为数值00也就是0,而0值是YEAR的一个合法取值。 BLOB和TEXT
BLOB是二进制字符串,TEXT是非二进制字符串。两者都可存放大容量的信息。