Archive for the ‘数据库’ Category

MySQL Column Types

Sunday, June 21st, 2009

昨天开始有点恢复了,今天正式进入状态,晚上还有有道难题复赛,白天睡了一觉,起来开始看MySQL,这次准备把以前所有的疑问都解决掉。

这一篇是关于MySQL中列(Column)的类型(Type)的叙述。

Text column types

MySQL提供了七种用来存储字符串文本的类型。

CHAR

用法:char(最大长度)。char类型最长可达255个字符,是定长类型。当实际长度小于最大长度时,剩余的部分会以空格填充。从表中取出字段时,多余的空格会自动被去掉。

VARCHAR

用法:varchar(最大长度)。varchar类型最长可达255个字符,是变长类型。MySQL会自动记录字符串的实际长度,并从字符串的末尾去掉空格。如果定义的最大长度小于4,MySQL会自动将列类型转换为char。

TINYTEXT

用法:tinytext。tinytext类型最长可达255个字符,是变长类型;实际上跟varchar(255)是等同的。整个字段都可以作为索引。

TEXT

用法:text。text类型最长可达65535个字符,是变长类型。可以在字段的前255个字符创建索引。

MEDIUMTEXT

用法:mediumtext。mediumtext类型最长可达16777215个字符,是变长类型。可以在字段的前255个字符创建索引。

LONGTEXT

用法:longtext。longtext类型最长可达4294967295个字符,是变长类型。可以在字段的前255个字符创建索引。实际上这个类型并不常用,因为MySQL目前只能支持最长为1600万个字符的字符串。

ENUM

用法:enum (‘value1’, ‘value2’, …) [default ‘value’]。enum类型最多可以允许多达65535个不同的枚举值,但一般实际应用的数目很少。以下是一个建表时的例子:

create table my_table (
    id int auto_increment primary key,
    answer enum (‘yes’, ‘no’) default ‘no’
);

Numeric column types

MySQL提供了七种数字类型;其中有些类型还有别名。所有的数字类型,最大显示长度(Maximum display size)都是255。有些数字类型提供了一个zerofill选项,用来对数字左边补零。比如显示长度为10的int类型的字段,值为25的时候,MySQL会显示为0000000025。数字类型还可以指定是否有符号(signedunsigned);默认是有符号。

INT(或INTEGER)

用法:int(显示长度) [unsigned] [zerofill]。int类型可以表示0~4294967295(无符号)或-2147483648~2147483647(有符号)以内的整数。int类型经常和auto_increment一同使用用来定义一个主键(Primary key)。

TINYINT

用法:tinyint(显示长度) [unsigned] [zerofill]。tinyint类型可以表示0~255(无符号)或-128~127(有符号)以内的整数。

MEDIUMINT

用法:mediumint(显示长度) [unsigned] [zerofill]。mediumint类型可以表示0~16777215(无符号)或-8388608~8388607(有符号)以内的整数。

BIGINT

用法:bigint(显示长度) [unsigned] [zerofill]。bigint类型可以表示0~18446744073709551615(无符号)或-9223372036854775808~9223372036854775807(有符号)以内的整数。

FLOAT

用法一:float(precision) [zerofill]。此用法中float类型为有符号浮点数。precision指定精度;精度不大于24为单精度,25~53为双精度。

用法二:float[(M,D)] [zerofill]。有符号单精度浮点数,有效范围约为-3.402823466E+38~-1.175494351E-38或0或1.175494351E-38~3.402823466E+38。M为显示长度,D为数字位数。参数省略后的float类型为精度不大于24的单精度浮点数。

DOUBLE(或DOUBLE PRECISION,REAL)

用法一:double[(M,D)] [zerofill]。有符号双精度浮点数,有效范围约为-1.7976931348623157E+308~-2.2250738585072014E-308或0或2.2250738585072014E-308~1.7976931348623157E+308。M为显示长度,D为数字位数。

用法二:decimal[(M[,D])] [zerofill]。以字符串形式保存的数字类型。

Date and time types

MySQL提供了五种用来存储日期或时间的类型。MySQL中的日期或时间类型很灵活,可以接受insert语句中用字符串或数字表示的形式。下面是一个例子:

create table date_test (
    id int unsigned auto_increment,
    the_date date
);

insert into date_test (the_date) values (‘09-06-21’);
insert into date_test (the_date) values (‘2009-06-21’);
insert into date_test (the_date) values (‘20090621’);
insert into date_test (the_date) values (090621);

DATE

用法:date。以YYYY-MM-DD格式存储,范围是1000-01-01至9999-12-31。

DATETIME

用法:datetime [null | not null] [default]。以YYYY-MM-DD HH:MM:SS格式存储,范围是1000-01-01 00:00:00至9999-12-31 23:59:59。

TIMESTAMP

用法:timestamp(size)。自动记录最后更新时间(insertupdate)。size的默认值是14;下表列出了详细信息:

Size Format
2 YY
4 YYMM
6 YYMMDD
8 YYYYMMDD
10 YYMMDDHHMM
12 YYMMDDHHMMSS
14 YYYYMMDDHHMMSS
TIME

用法:time。以HH:MM:SS格式存储,范围是-838:59:59至838:59:59。

YEAR

用法:year[(2|4)]。两位数年份的范围是1970年至2069年,四位数年份的范围是1901年至2155年。