MySQL中的数据类型

来源:互联网 发布:ltd域名备案 编辑:程序博客网 时间:2024/05/16 02:06

转自:http://book.51cto.com/art/200711/60008.htm

MySQL中的数据类型

MySQL支持多种数据类型,数值类型、日期/时间类型和字符串(字符)类型不区分大小写。下面将详细讲解各种数据类型。

 

1. 数据类型描述惯例

几种数据类型描述使用了下述惯例,详细内容如表2-9所示。

表2-9  数据类型描述管理解释

标识符名称

   

M

表示最大显示宽度。最大有效显示宽度是255

D

适用于浮点和定点类型,并表示小数点后面的位数。最大可能的值是30,但不应大于M2

方括号([’和‘])

表示可选部分

 

2. 数值数据类型

MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLEPRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。详细信息如表2-10所示。

表2-10  MySQL中的数值数据类型

数据类型名称

   

BIT[(M)]

位字段类型。M表示每个值的位数,范围为164。如果M被省略, 默认为1

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

很小的整数。带符号的范围是–128127。无符号的范围是0255

BOOLBOOLEAN

TINYINT(1)的同义词。zero值被视为假。非zero值视为真

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

中等大小的整数。带符号的范围是–8 388 6088 388 607。无符号的范围是016 7 77 2 15

INT[(M)] [UNSIGNED] [ZEROFILL]

普通大小的整数。带符号的范围是–2 147 483 6482 147 483 647。无符号的范围是04 294 967 295

数据类型名称

   

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

这是INT的同义词

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

大整数。带符号的范围是–9 223 372 036 854 775 8089 223 372 036 854 775 807。无符号的范围是018 446 744 073 709 551 615

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

(单精度)浮点数。允许的值是–3.402 823 466E+38~–1.175 494 351E3801.175 494 351E383.402 823 466E+38

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

普通大小(双精度)浮点数。允许的值是–1.797 693 134 862 315 7E+308~–2.225 073 858 507 2014E30802.225 073 858 507 201 4E-3081.797 693 134  862 315 7E+308

上面并不是完整的MySQL数值数据类型列表,若要了解完整的MySQL数值数据类型解释,请参见MySQL参考文档。

 

3. 日期和时间类型

每个时间类型有一个有效值范围和一个“零”值,当指定不合法的值时,MySQL使用“零”值表示。
MySQL以标准输出格式检索给定日期或时间类型的值,也会尽力解释用户输入的值。下面是MySQL支持的有效格式。

● 包含两位年值的日期会令人感到模糊,因为世纪表述不清。
● 如果值用于数值上下文中,MySQL自动将日期或时间类型的值转换为数字,反之亦然。
● 当 MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时(如本节开始所描述),它将该值转换为该类的“零”值。一个例外是超出范围的TIME值被裁剪到TIME范围的相应端点。

DATETIME类型表示同时包含日期和时间信息的值。MySQL以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'~'9999-12-31 23:59:59'。

DATE类型表示只有日期值而没有时间值的值。MySQL用'YYYY-MM-DD'格式检索和显示DATE值。支持的范围为'1000-01-01'~'9999-12-31'。

MySQL以'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。TIME值的范围为'–838:59:59'~'838:59:59'。小时部分的数值之所以大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能用于表示某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者为负)。

TIME值可以使用多种表示格式。

● 'DHH:MM:SS.fraction'格式的字符串。还可以使用下面任何一种“非严格”语法'HH:MM:SS.fraction'、'HH:MM:SS'、'HH:MM'、'D HH:MM:SS'、'D HH:MM'、'DHH'或'SS'。这里D表示日,可以取0~34的值。请注意MySQL不保存分数。
● 'HHMMSS'格式的没有间隔符的字符串,被假定为是有意义的时间。例如,'101112'被理解为'10:11:12',但'109712'是不合法的(它有一个没有意义的分钟部分),其将变为'00:00:00'。
● HHMMSS格式的数值,被假定为是有意义的时间。例如,101112被理解为'10:11:12'。下面的格式也可以理解:SS、MMSS、HHMMSS、HHMMSS.fraction。请注意MySQL不保存分数。
YEAR类型是一个单字节类型,用于表示年。MySQL以YYYY格式检索和显示YEAR值。范围为1901~2155。
可以指定各种格式的YEAR值。
● 四位字符串,范围为'1901'~'2155'。
● 四位数字,范围为1901~2155。
● 两位字符串,范围为'00'~'99'。'00'~'69'和'70'~'99'范围的值分别被转换为2000~2069和1970~1999范围的YEAR值。
● 两位整数,范围为1~99。1~69和70~99范围的值分别被转换为2001~2069和1970~1999范围的YEAR值。请注意两位整数范围与两位字符串范围稍有不同,因为不能直接将零指定为数字并将它解释为2000。必须将它指定为一个字符串'0'或'00'或它被解释为0000。

注意:
非法YEAR值被转换为0000。


4. 字符串类型

字符串类型包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

● CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和尾部空格是否被保留等方面也不同。在存储或检索过程中不进行大小写转换。
● CHAR和VARCHAR类型声明的长度表示要保存的最大字符数。例如,CHAR(30)可以占用30个字符。
● CHAR列的长度固定为创建表时声明的长度。长度可以为0~255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
● VARCHAR列中的值为可变长字符串。长度可以指定为0~65 535的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65532字节)。同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
● BINARY和VARBINARY数据类型不同于CHAR BINARY和VARCHARBINARY数据类型。对于后一种类型,BINARY属性不会将列视为二进制字符串列。相反,它只是使用列字符集的二元校对规则,并且列自身包含非二进制字节字符串而不是二进制字节字符串。例如CHAR(5) BINARY被视为CHAR(5) CHARACTERSET latin1 COLLATE latin1_bin,
● BLOB是一个二进制大对象,可以容纳可变数量的数据。BLOB类型有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB有4种。它们只是可容纳值的最大长度不同。
● TEXT类型有TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT4种。这些对应4种BLOB类型,有相同的最大长度和存储需求。

TINYTEXT 最大长度是 255 (2^8 - 1) 个字符。

TEXT 最大长度是 65535 (2^16 - 1) 个字符。

MEDIUMTEXT 最大长度是 16777215 (2^24 - 1) 个字符。

LONGTEXT 最大长度是 4294967295 (2^32 - 1) 个字符。

原创粉丝点击