MySQL
支持多种列类型:
数值类型、日期/时间类型、字符串(字符)类型。
1. 数值类型:
BIT[(M)],位字段类型;
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
TINYINT[(M)],很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
BOOL,BOOLEAN,是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。是TINYINT(1)的同义词。
SMALLINT[(M)],小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
MEDIUMINT[(M)],中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
INT[(M)],INTEGER[(M)],普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
BIGINT[(M)]
FLOAT[(M,D)],DOUBLE[(M,D)],DECIMAL[(M[,D])],等等
2. 日期和时间类型:
DATE,日期。支持的范围为'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式显示DATE值
DATETIME,日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值
TIMESTAMP[(M)],时间戳。TIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串,显示宽度固定为19个字符。
TIME,时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式显示TIME值
YEAR[(2|4)],两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到2155和0000。在两位格式中,允许的值是70到69,表示从1970年到2069年。MySQL以YYYY 格式显示YEAR值
3. 字符串类型:
1)字符串数据类型的列定义可以包括指定字符集的CHARACTER SET属性
c1 CHAR(20) CHARACTER SET utf8
2)常见的字符串类型
CHAR,单个char表示CHAR(1)的同义词,字符长度为1
CHAR(M),固定长度字符串,当保存时在右侧填充空格以达到指定的长度。M表示列长度。M的范围是0到255个字符。注释:当检索CHAR值时尾部空格被删除。
BINARY(M),BINARY类型类似于CHAR类型,但保存二进制字节字符串而不是非二进制字符串。
VARCHAR(M),变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)。注释:MySQL 5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。
注意:
VARBINARY(M),VARBINARY类型类似于VARCHAR类型,但保存二进制字节字符串而不是非二进制字符串。但是 VARBINARY(M)中M的取值范围却不同0 <= M <= 255
TINYBLOB,最大长度为255(28–1)字节的BLOB列。
BLOB[(M)],最大长度为65,535(216–1)字节的BLOB列。
MEDIUMBLOB,
LONGBLOB
TINYTEXT
TEXT[(M)]
MEDIUMTEXT
LONGTEXT
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
ENUM('value1','value2',...),枚举类型。只能有一个值的字符串
SET('value1','value2',...)
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
关于列类型更详细信息参考:http://dev.mysql.com/doc/refman/5.1/zh/column-types.html
4.着重分析字符串类型:
1)CHAR和VARCHAR类型的不同:
CHAR为固定长度;VARCHAR为可变长度
2)BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。
也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
3)BLOB和TEXT类型
a. BLOB:
二进制大对象,可以容纳可变数量的数据。
有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
BLOB 列被视为二进制字符串(字节字符串)。
BLOB列没有字符集,并且排序和比较基于列值字节的数值值。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
b. TEXT:
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求.
TEXT列被视为非二进制字符串(字符字符串)。
TEXT列有一个字符集,并且根据字符集的 校对规则对值进行排序和比较。
<!--[if !supportLists]-->· <!--[endif]-->在TEXT或BLOB列的存储或检索过程中,不存在大小写转换。
<!--[if !supportLists]-->· <!--[endif]-->在大多数方面,可以将BLOB列视为能够足够大的VARBINARY列。
<!--[if !supportLists]-->· <!--[endif]-->可以将TEXT列视为VARCHAR列。
<!--[if !supportLists]-->· <!--[endif]-->BLOB和TEXT在以下几个方面不同于VARBINARY和VARCHAR:
1. 当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同)。
请注意比较时将用空格对TEXT进行扩充以适合比较的对象,正如CHAR和VARCHAR。
2. 对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的。
VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。