分类: Mysql/postgreSQL
2011-05-30 14:58:53
列数据类型
M 表示最大显示宽度。最大有效显示宽度是255,显示宽度与存储大小或类型包含的值的范围无关。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示
D 适用于浮点和定点类型,并表示小数点后面的位数。最大可能的值是30,但不应大
于M-2。
‘[’和‘]’ 表示可选部分
数值类型
l 如果为一个数值列指定ZEROFILL,默认补充的空格用零代替,MySQL自动为该列添加UNSIGNED属性。
l 浮点和定点类型也可以为UNSIGNED。同数类型,该属性防止负值保存到列中,然而,
与整数类型不同的是,列值的上范围保持不变。
l SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一个别名。
l SERIAL DEFAULT VALUE是NOT NULL AUTO_INCREMENT UNIQUE的一个别名。
l 应当清楚,当使用在整数值(其中一个是UNSIGNED类型)之间使用减号时,结果是无符号。
l 对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
l 使用带符号的BIGINT或DOUBLE值进行所有算法,因此除了位函数,不应使用大于9223372036854775807(63位)的无符号的大整数!如果这样做,结果中的最后几位可能出错,这是由于将BIGINT值转换为DOUBLE进行四舍五入时造成的错误。
l 使用浮点数可能会遇到意想不到的问题,因为在MySQL中的所有计算用双精度完成。
浮点和定点类型也可以为UNSIGNED。同数类型,该属性防止负值保存到列中。然而, 与整数类型不同的是,列值的上范围保持不变。
整数类型的存储和范围:
类型 |
字节 |
最小值 |
最大值 |
|
|
(带符号的/无符号的) |
(带符号的/无符号的) |
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 |
9223372036854775807 |
|
|
0 |
18446744073709551615 |
BIT[(M)]
位字段类型。M表示每个值的位数,范围为从1到64。如果M被省略, 默认为1。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
BOOL,BOOLEAN
是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
INT[(M)] [UNSIGNED] [ZEROFILL]
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围 是0到18446744073709551615。
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
小(单精度)浮点数。允许的值是-3.402823466E+38到-1.175494351E-38、0和 1.175494351E-38到3.402823466E+38。M是小数纵位数,D是小数点后面的位数。如果M 和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
普通大小(双精度)浮点数。允许的值是-1.7976931348623157E+308到 -2.2250738585072014E-308、0和2.2250738585072014E-308到 1.7976931348623157E+308。M是小数总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位。
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL],REAL[(M,D)] [UNSIGNED] [ZEROFILL]
为DOUBLE的同义词。除了:如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。
FLOAT(p) [UNSIGNED] [ZEROFILL]
浮点数。p表示精度(以位数表示),但MySQL只使用该值来确定是否结果列的数据类 型为FLOAT或DOUBLE。如果p为从0到24,数据类型变为没有M或D值的FLOAT。如果p 为从25到53,数据类型变为没有M或D值的DOUBLE。结果列范围与本节前面描述的单精 度FLOAT或双精度DOUBLE数据类型相同。FLOAT(p)语法与ODBC兼容。
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
压缩的“严格”定点数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M中。如果D是0,则值没有小数点或分数部分。DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略, 默认是0。如果M被省略, 默认是10。
所有DECIMAL列的基本计算(+,-,*,/)用65位精度完成。
DEC[(M[,D])][UNSIGNED][ZEROFILL],NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL],FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
是DECIMAL的同义词。FIXED同义词适用于与其它服务器的兼容性。
日期和时间类型
l 每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值。
l 如果试图插入一个不合法的日期,MySQL将给出警告或错误。可以使用ALLOW_INVALID_DATES SQL模式让MySQL接受某些日期。MySQL允许在DATE或DATETIME列保存日/月和日是零的日期。如果你不想在日期中出现零,可以使用NO_ZERO_IN_DATE SQL模式)。
l 当 MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时(如本节开始所描述),它将该值转换为该类的“零”值。一个例外是超出范围的TIME值被裁剪到TIME范围的相应端点。
l 允许“不严格”语法:任何标点符都可以用做日期部分或时间部分之间的间割符。
DATE
日期。支持的范围为'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式显示 DATE值,但允许使用字符串或数字为DATE列分配值。
DATETIME
日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。 MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但允许使用字符串或数字为 DATETIME列分配值。
TIMESTAMP[(M)]
时间戳。范围是'1970-01-01 00:00:00'到2037年。TIMESTAMP列用于INSERT或UPDATE 操作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设 置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当 前的日期和时间。TIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串,显 示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP列添加+0。
TIME
时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式显示TIME值,但 允许使用字符串或数字为TIME列分配值。
YEAR[(2|4)]
两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到2155和0000。 在两位格式中,允许的值是70到69,表示从1970年到2069年。MySQL以YYYY 格式显 示YEAR值,但允许使用字符串或数字为YEAR列分配值。70-99范围的年值转换为 1970-1999,00-69范围的年值转换为2000-2069。
字符串类型
l 字符列的排序和比较基于分配给列的字符集。
于CHAR和VARCHAR 列,你可以用BINARY属性声明列让排序和 校对规则使用当前的字 符代码值而不是词汇顺序。
BINARY属性是指定列字符集的二元 校对规则的简写。排序和比较基于数值字符值。
列类型CHAR BYTE是CHAR BINARY的一个别名。这是为了保证兼容性。
l 请注意所有MySQL校对规则属于PADSPACE类。这说明在MySQL中的所有CHAR和VARCHAR值比较时不需要考虑任何尾部空格。
l 对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的。
[NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE]
固定长度字符串,当保存时在右侧填充空格以达到指定的长度。
可以为CHAR指定ASCII属性。它分配latin1字符集。
可以为CHAR指定UNICODE属性。它分配ucs2字符集。
CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
CHAR这是CHAR(1)的同义词。
[NATIONAL] VARCHAR(M) [BINARY]
变长字符串。M 表示最大列长度。M的范围是0到65,535。
VARCHAR是字符VARYING的简写。
VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532
字节。
VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于
255,长度前缀是两个字节。
VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
BINARY(M)
BINARY类型类似于CHAR类型,但保存二进制字节字符串而不是非二进制字符串。
VARBINARY(M)
VARBINARY类型类似于VARCHAR类型,但保存二进制字节字符串而不是非二进制字符串。
TINYBLOB
最大长度为255(28–1)字节的BLOB列。
TINYTEXT
最大长度为255(28–1)字符的TEXT列。
BLOB[(M)]
最大长度为65,535(216–1)字节的BLOB列。
TEXT[(M)]
最大长度为65,535(216–1)字符的TEXT列。
MEDIUMBLOB
最大长度为16,777,215(224–1)字节的BLOB列。
MEDIUMTEXT
最大长度为16,777,215(224–1)字符的TEXT列。
LONGBLOB
最大长度为4,294,967,295或4GB(232–1)字节的BLOB列。LONGBLOB列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。
LONGTEXT
最大长度为4,294,967,295或4GB(232–1)字符的TEXT列。LONGTEXT列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。
ENUM('value1','value2',...)
枚举类型。只能有一个值的字符串,从值列'value1','value2',...,NULL中或特殊 ''错误值中选出。ENUM列最多可以有65,535个截然不同的值。ENUM值在内部用整数表示。
SET('value1','value2',...)
一个设置。字符串对象可以有零个或多个值,每个值必须来自列值'value1','value2',...SET列最多可以有64个成员。SET值在内部用整数表示。