MySQL学习笔记--数据类型

方括号中的属性可以在DDL语句中控制COLUMN的详细属性
一、整数型
1.INT[(width)][UNSIGNED][ZEROFILL]
MySQL用4 bytes存储INT型数据,其值在-2,147,483,648到2,147,483,647之间,如果选择了UNSIGNED类型,那么值在0到4,294,967,295。INT和INTEGER可以互换。(width)指定了数字的位数,如果实际的值超出了这个位数,那么(width)会被忽略。如果是UNSIGEND,通过指定ZEROFILL会由0在左侧占位补足

2.BOOLEAN
也可以写为BOOL或BIT,需要1个byte空间,用来存储boolean value,false(zero)或者true(nonzero),等价于TINYINT(1)

3.TINYINT[(width)][UNSIGNED][ZEROFILL]
需要一个byte空间,值的范围在-127到128或0到255

4.SMALLINT[(width)][UNSIGNED][ZEROFILL]
需要2bytes空间,值的范围在-32768到32767或者0到65535

5.MEDIUMINT[(width)][UNSIGNED][ZEROFILL]
需要3个byte,范围在-8,388608到8,388,607或者0到16,777,215

6.BIGINT[(width)][UNSIGNED][ZEROFILL]
需要8个byte,范围在-9,223,372,036,854,775,808到9,223,372,036,854,775,807或0到18,446,744,073,709,551,615

二、浮点数型
1.DECIMAL[(width[,decimals])][UNSIGNED][ZEROFILL]
也可以使用关键字DEC,NUMERIC,FIXED。在5.0.3版本以前,是作为string来存储的。从5.0.3版本以后,采用二进制存储,对每9位数字用4bytes存储。和INT不同,DECIMAL能存储的值是由(width,decimal)来确定的,超过的值会保存为指定范围内最接近的值。在5.0.3版本以前,正数的存储范围还可以比指定的范围在整数部分多1位

2.FLOAT[(width,decimals)][UNSIGNED][ZEROFILL] or FLOAT[(precision)][UNSIGNED][ZEROFILL]
默认的,FLOAT是一个4byte的单精度浮点值。当precision在0到24之间时,FLOAT就采用默认形式,当precision在25到53之间时,相当于DOUBLE。width不影响数据存储,只影响显示

3.DOUBLE[(width,decimals)][UNSIGNED][ZEROFILL]
默认为8byte双精度浮点值,width同样只影响显示。也可以写为REAL或DOUBLE PRECISION

三、时间和日期
1.DATE
存储和显示的范围在1000-01-01到9999-12-31之间,MySQL始终以YYYY-MM-DD的格式显示数据
输入可以采用以下格式
(1)YYYY-MM-DD or YY-MM-DD
如果以YY输入,70-99被解释为1970-1999,00-69被解释为2000-2069
(2)YYYY/MM/DD, YYYY:MM:DD, YY/MM/DD
可以使用任何标点(punctuation characters)作为分割符
(3)YYYY-M-D, YYYY-MM-D, or YYYY-M-DD
(4)YYYYMMDD or YYMMDD
如果输入的日期超出了范围,MySQL会保存为0000-00-00(zero date)。另外,从5.0.2版本开始,对无效日期,也会保存为zero date

2.TIME
存储的范围在-838:59:59到838:59:59,即34天,22小时,59分,59秒。如果输入值超出了范围,会被存储为最接近的值。如果在某个部分无效,会被存储为00:00:00
输入可以用以下格式
(1)DD HH:MM:SS, HH:MM:SS; DD HH:MM, HH:MM; DD HH; SS
(2)H:M:S, 可以为1-3位数字
(3)HHMMSS, MMSS, SS

3.TIMESTAMP
以YYYY-MM-DD HH:MM:SS的格式存储和显示一个日期-时间对。存储的范围从1970-01-01 00:00:00到2037年的某个时间。但这个类型具体的含义在MySQL的各个版本中都略有不同。TIMESTAMP可以在INSERT或UPDATE表时,被一同自动更新为当前时间。但对每张表,只有一个TIMESTAMP是可以自动更新的。如果有多个TIMESTAMP型的COLUMN,需要将其他的COLUMN置一个constant default(such as DEFAULT 0)。如果要在INSERT时自动设置,需要在建表时指定为DEFAULT CURRENT_TIMESTAMP,如果需要在UPDATE时也自动更新,需要在建表时指定为ON UPDATE CURRENT_TIMESTAMP。如果两者都要,则都要指定。
DEFAULT NULL对表中的第一个TIMESTAMP,会被解释为DEFAULT CURRENT_TIMESTAMP,对后面的TIMESTAMP, 会被解释为DEFAULT 0。
输入可以采用以下格式
(1)YYYY-MM-DD HH:MM:SS or YY-MM-DD HH:MM:SS,可以采用其他标点作分隔符
(2)YYYYMMDDHHMMSS or YYMMDDHHMMSS

4.YEAR[(digits)]
需要1个byte,digits可以为2或4,默认为4。2digits存储的范围为70到69,即1970-2069;4digits存储的范围1901-2155,也包括0000,无效值都会被转化为0000

5.DATETIME
也是时间-日期对,同TIMESTAMP相比只是没有了自动更新的特性。范围从1000-01-01 00:00:00到9999-12-31 23:59:59。如果用一个date赋值,time部分会被设为00:00:00;如果用一个time赋值,date部分会被设为0000-00-00。输入可以采用的形式与TIMESTAMP相同

四、字符
1.CHAR[(width)]
width默认为1,最大值为255,超过255会被转化为最小的TEXT。可以定义CHAR(0),只能包含NULL或者""(empty string)两种值,它只需要一个bit来存储。另外,字符串中的trailing spaces都会被忽略掉。

2.VARCHAR[(width)]
变长字符串,width最大为65,535,在5.0.3版本前为255。另外需要1到2个byte来存储字符串长度。超过长度限制会被转为最小的TEXT。在存储是trailing spaces同样会被去掉

3.BINARY(width) and VARBINARY(width)
与CHAR或VARCHAR等效,只不过是以二进制存储。从4.1.2版本引入,在4.1.2以前版本,可以通过在CHAR或VARCHAR后面指定BINARY关键字获得这一特性

4.BLOB
以二进制形式存储大型数据,最大长度为65535bytes。对字符串不会去除trailing spaces,不允许DEFAULT clause

5.TEXT
存储大型string,最大长度也是65535bytes。同BLOB相比,TEXT有字符集属性,排序是大小写无关的

6.TINYBLOB and TINYTEXT
最大长度255bytes的BLOB和TEXT

7.MEDIUMBLOB and MEDIUMTEXT
16,777,215bytes的BLOG和TEXT

8.LONGBLOB and LONGTEXT
最大长度4gigabytes的BLOG和TEXT,有效长度取决于server的内存配置等

9.ENUM('value1'[,'value2'[, ... 'valuen]])
string的枚举,最多包含65535个不同的枚举值。在输入和显示时都是string,但数据库内部存储实际是INTEGER。另外,ENUM还可以包含NULL(stored as NULL)和empty string ''(stored as 0),其他有效的枚举值则为1,2,...n。通过声明NOT NULL,是ENUM拒绝接受NULL。另外,无效的枚举值会被保存为''

10.SET('value1'[,'value2'[, ... 'valuen]])
输入和显示是string,数据库内部同样以INTEGER存储。最多存储64个元素,无效的元素也会被保存为''。SET和ENUM的区别是ENUM只能保存枚举值中的一个,而SET可以同时保存多个元素

你可能感兴趣的:(mysql,Blog)