昨天开始有点恢复了,今天正式进入状态,晚上还有有道难题复赛,白天睡了一觉,起来开始看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。数字类型还可以指定是否有符号(signed或unsigned);默认是有符号。
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)。自动记录最后更新时间(insert或update)。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年。