MySql数据库中字段数据类型详解
在mysql中数据类型分类主要三类,数值类、字符串类和日期/时间类,它们分别用于不同作用场合,下面小编来给大家介绍mylsq字段类型的介绍,有需要了解的朋友可进入参考。
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是非二进制字符串,两者都可存放大容量的信息.
有关BLOB和TEXT索引的建立:
BDB表类型和MySQL3.23.2以上版本的MyISAM表类型允许在BLOB和TEXT数据列上建立索引.
ISAM、HEAP和InnoDB表不支持大对象列的索引。
使用BLOB和TEXT应注意的问题:
由于这两个列类型所存储的数据量大,所以删除和修改操作容易在数据表里产生大量的碎片,需定期运行OPTIMIZE TABLE以减少碎片和提高性能。
如果使用的值非常巨大,就需对服务器进行相应的优化调整,增加max_allowed_packet参数的值。对那些可会用到变些巨大数据的客户程序,也需加大它们的数据包大小。
ENUM和SET
ENUM和SET都是比较特殊的字符串数据列类型,它们的取值范围是一个预先定义好的列表。ENUM或SET数据列的取值只能从这个列表中进行选择。ENUM和SET的主要区别是:
ENUM只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最多允许有65535个成员。例如:ENUM(”N”,”Y”)表示,该数据列的取值要么是”Y”,要么就是”N”.
上一页 1 2 下一页
热门评论