每张数据表至少有一个数据列,每个数据列必须有一个数据类型。本文说一下mysql支持的数据类型。


1. 整数(xxxINT)


    整数包括正数和负数,但如果给INT数据列定义了UNSIGNED,则只包含正数。对于整数又包含如下几种类型:


    TYNYINT、SMALLINT、MEDIUMINT、INT、BIGINT,它们分别为8、16、24、32、64位整数。另外mysql还有一个类型:SERIAL,这是BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY的简写。


2. 浮点数


    mysql中分单精度和双精度浮点数,它们分别为FLOAT、DOUBLE。这设置浮点数时可以用m和d来设置数据的精度,如:FLOAT(10, 3)、DOUBLE(10, 3)分别表示整数位保存10位,小数点后经确定3位的单精度和双精度数据。对于DOULBE,mysql中还有一个REAL为它的同名词。


3. 定点数(DECIMAL)


    myql在把数据保存为FLOAT和DOUBLE时,会进行必要的舍入,如果因此带来的误差不可接受,就应该使用DECIMAL。DECIMAL以字符串的形式存储数据,并且不允许使用指数形式,所以它会占用更多的空间。它的使用方法为:


    DECIMAL(p, s):p和s分别设定了数据值的数字总个数(最大65位)和小数点后面的数字个数(最大30位)。


4. 日期和时间(DATE、TIME、DATETIME、TIMESTAMP)


    DATE、TIME、DATETIME这三种类型很好理解,它们分别表示日期、时间即日期+时间。这里说明一下TIMESTAMP,它的角色比较特殊,这个类型的字段会在数据记录的其他字段被修改时自动刷新,从效果上看,这个字段里的日期/时间值其实就是数据记录的最后一次修改时间。TIMESTAMP也有自己的属性,用于控制TIMESTAMP的刷新行为:


    TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:


    在创建记录和修改现有记录时,都对这个数据列进行刷新,同单独的TIMESTAMP的效果是一样的。


    TIMESTAMP DEFAULT CURRENT_TIMESTAMP:


    在创建记录时设置当前时间,以后修改不再刷新


    TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:


    创建时,值设置为0,后续更新时刷新


    TIMESTAMP DEFAULT 'yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP:


    创建时设置默认值,后续更新时进行刷新


5. 文本类型


    mysql中支持的文本类型包括:CHAR,VARCHAR,TYNYTEXT,TEXT,MEDIUMTEXT,LONGTEXT.每种类型支持不同长度的文本。其中前三种最多支持255个字节长度,后面三种分别支持最长长度为:2^16-1,2^32-1,2^64-1个字节。


6.二进制数据


    二进制数据类型包括BIT和BLOB,它们存储二进制的对象。具体包括:BIT,TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB.长度与TEXT中的一致。BIT最多支持64位二进制,TYNYBLOB最多支持255位,后面三种最多支持:2^16-1,2^32-1,2^64-1位2进制。