MySQL数据类型
数值值
数值是诸如48或193.62这样的值。MySQL支持说明为整数(无小数部分)或浮点数
(有小数部分)的值。整数可按十进制形式或十六进制形式表示。
(字符)串值
串是诸如“Madison,Wisconsin”或“patientshowsimprovement”这样的值。既可用单引号也可用双引号将串值括起来。
序列说明
\0NUL(ASCII0) \n新行
\’单引号 \r回车
\”双引号 \t制表符
\b退格 \\反斜杠
日期和时间值
日期和时间是一些诸如“1999-06-17”或“12:30:43”这样的值。MySQL还支持日期/时间的组合,如“1999-06-1712:30:43”。要特别注意这样一个事实,即MySQL是按年-月-日的顺序表示日期的。MySQL的初学者通常对这一点很惊奇,其实这是ANSISQL的标准格式。可以利用DATE_FORMAT()函数以任意形式显示日期值,但是缺省显示格式首先显示年,而且输入值也必须首先给出年。
NULL值
NULL是一种“无类型”的值。它过去惯常表示的意思是“无值”、“未知值”、“丢失的值”、“溢出值”以及“没有上述值”等。可将NULL值插入表中、从表中检索它们,测试某个值是否是NULL,但不能对NULL值进行算术运算(如果对NULL进行算术运算,其结果为NULL)。
MySQL的列类型
数据库中的每个表都是由一个或多个列构成的。在用CREATETABLE语句创建一个表时,要为每列指定一个类型。列的类型比数据类型更为特殊,它仅仅是如“数”或“串”这样的通用类型。列的类型精确地描述了给定表列可能包含的值的种类,如SMALLINT或VARCHAR(32)。
MySQL的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了MySQL怎样处理这些值。例如,数值值既可用数值也可用串的列类型来存放,但是根据存放这些值的类型,MySQL对它们的处理将会有些不同。每种列类型都有几个特性如下:
■其中可以存放什么类型的值。
■值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或可变长的(所占空间量依赖于所存储的值)。
■该类型的值怎样比较和存储。
■此类型是否允许NULL值。
■此类型是否可以索引。
数值列类型
TINYINT非常小的整数
SMALLINT较小整数
MEDIUMINT中等大小的整数
INT标准整数
BIGINT大整数
FLOAT单精度浮点数
DOUBLE双精度浮点数
DECIMAL一个串的浮点数
?
数值列类型的取值范围
TINYINT[(M)]
有符号值:-128到127(-2^7到2^7-1)
无符号值:0到255(0到2^8-1)
SMALLINT[(M)]
有符号值:-32768到32767(-2^15到2^15-1)
无符号值:0到65535(0到2^16-1)
MEDIUMINT[(M)]
有符号值:-8388608到8388607(-2^23到2^23-1)
无符号值:0到16777215(0到2^24-1)
INT[(M)]
有符号值:-2147683648到2147683647(-2^31到2^31-1)
无符号值:0到4294967295(0到2^32-1)
BIGINT[(M)]
有符号值:-9223372036854775808到9223373036854775807(-2^63到2^63-1)
无符号值:0到18446744073709551615(0到2^64-1)
FLOAT[(M,D)],最小非零值:±1.175494351E-38
FLOAT(4)最大非零值:±3.402823466E+38
DOUBLE[(M,D)],最小非零值:±2.2250738585072014E-308
FLOAT(8)最大非零值:±1.7976931348623157E+308
DECIMAL(M,D)可变;其值的范围依赖于M和D
?
数值列类型的存储需求
TINYINT[(M)]1字节
SMALLINT[(M)]2字节
MEDIUMINT[(M)]3字节
INT[(M)]4字节
BIGINT[(M)]8字节
FLOAT[(M,D)],FLOAT(4)4字节
DOUBLE[(M,D)],FLOAT(8)8字节
DECIMAL(M,D)M字节(MySQL<3.23),M+2字节(MySQL33.23)
可对所有数值类型指定ZEROFILL属性。它使相应列的显示值用前导零来填充,以达到显示宽度。
AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可利用AUTO_INCREMENT属性。AUTO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列中当前最大值大1的值。一个表中最多只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOTNULL并定义为PRIMARYKEY或定义为UNIQUE键。
UNSIGNED。此属性禁用负值。将列定义为UNSIGNED并不改变其基本数据类型的取值范围,它只是前移了取值的范围。设为UNSIGNED,则可取原双倍的值。
串列类型
CHAR定长字符串
VARCHAR可变长字符串
TINYBLOB非常小的BLOB(二进制大对象)
BLOB小BLOB
MEDIUMBLOB中等的BLOB
LONGBLOB大BLOB
TINYTEXT非常小的文本串
TEXT小文本串
MEDIUMTEXT中等文本串
LONGTEXT大文本串
ENUM枚举;列可赋予某个枚举成员
SET集合;列可赋予多个集合成员
串列类型
类型说明 最大尺寸 存储需求
CHAR(M) M字节 M字节
VARCHAR(M) M字节 L+1字节
TINYBLOB,TINYTEXT 2^8-1字节 L+1字节
BLOB,TEXT 2^16-1字节 L+2字节
MEDIUMBLOB,MEDIUMTEXT 2^24-1字节 L+3字节
LONGBLOB,LONGTEXT 2^32-1字节 L+4字节
ENUM(“value1”,“value2”,...)65535个成员1或2字节
SET(“value1”,“value2”,...)64个成员1、2、3、4或8字节
串实际是一种“通用”类型,因为可用它们来表示任意值。例如,可用串类型来存储二进制数据,如影像或声音,或者存储gzip的输出结果,即存储压缩数据。
CHAR和VARCHAR是最常使用的串类型。它们是有差异的,CHAR是定长类型而VARCHAR是可变长类型。CHAR(M)列中的每个值占M个字节;短于M个字节的值存储时在右边加空格(但右边的空格在检索时去掉)。如果所需的值在长度上变化不大,则CHAR是一种比VARCHAR好的选择,因为处理行长度固定的表比处理行长度可变的表的效率更高。
BLOB是一个二进制大对象,是一个可以存储大量数据的容器,可以使其任意大。在MySQL中,BLOB类型实际是一个类型系列(TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB),除了在可以存储的最大信息量上不同外,它们是等同的。MySQL还有一个TEXT类型系列(TINYTEXT、TEXT、M