MySQL数据类型

2009年11月7日 Web开发, 原创

MySQL

MySQL

MySQL跟其他主流数据库一样,能够存储任何类型的数据,比如字符、数值和日期。而且,大多数应用程序中只会用到这3种数据。

1. 字符数据

1.1 字符数据分为字符型和文本型。字符型又分为两种,一是固定长度字符型(char),存储空间为255字节,不足空间以空格填充;另一种是可变长度字符型(varchar),存储空间为65 535字节,不足空间不用空格填充。在为表列定义字符类型时,必须指定最大字符数(英文每个字母占一个字节,汉字每个字占两个字节),不能超过相应类型的字节上限,例如:

char(40) /* 固定长度字符列,最多可以保存40个英文字母或20个汉字 */
char(280) /* 无效,超过了255字节 */
varchar(280) /* 可变长度字符列,最多可以保存280个英文字母或140个汉字 */

1.2 另外,在为表列指定数据类型的同时,可以同时指定列的字符集,例如:

varchar(20) character set utf8 /* UTF-8字符集,可以用于保存汉字等多字节字符 */

甚至,在创建数据库时也可以直接指定默认的字符集,例如:

create database myblog character set utf8;

1.3 对于要求存储空间大于64KB(64×1024=65 535字节)的列,就需要声明为文本型了。文本型又分为四种:短文本型(tinytext/255)、文本型(text/65 535)、中长文本型(mediumtext/16 777 215)和长文本型(longtext/4 294 967 295)。

由于MySQL提供了65 535字节长的可变长度字符型(varchar),因此短文本型(tinytext)和文本型(text)并不常用。

关于文本型数据,有以下说明:
(1)如果实际文本超出相应类型指定的最大长度,则多余文本将被截掉;
(2)如果实际文本不足相应类型指定的最大长度,则不会删除后面空格;

2. 数值数据

数值数据分为整数和浮点数(带小数点的数,有符号),而整数又分有符号数和无符号数(用于区分正负数)。MySQL中有5种整数数值类型:

较小整数(tinyint/-128~127或0~255);
小整数(smallint/-32 768~32 767或0~65 535);
中长整数(mediumint/-8 388 608~8 388 607或0~16 777 215);
整数(int/-2 147 483 648~2 147 483 647或0~4 294 967 295);
大整数(bigint/-9 223 372 036 854 775 808~9 223 372 036 854 775 807或0~18 446 744 073 709 551 615)。

声明整数类型列时,必须指定该列是有符号(signed)还是无符号(unsigned),例如:

smallint unsigned  /* 表示只保存正整数 */

有两种浮点数值类型:单精度浮点数,float(p,s)和双精度浮点数,double(p,s)。其中,p表示精度(小数点左右两侧的数字位数和),s表示至少保留几位小数。

3.时间数据

时间数据可以是日期、时间、日期加时间。MySQL有5种时间数据类型:

日期型:date YYYY-MM-DD 1000-01-01~9999-12-31
日期时间型:datetime YYYY-MM-DD HH:MI:SS 1000-01-01 00:00:00~9999-12-31 23:59:59
时间戳型:timestamp YYYY-MM-DD HH:MI:SS 1970-01-01 00:00:00 to 2037-12-31 23:59:59
年型:year YYYY 1901 to 2155
时间型:time HHH:MI:SS -838:59:59 to 838:59:59

其中,HHH:MI:SS中的HHH表示已经过去的小时数,而其他日期时间组件YYYY(年)、MM(月)、DD(日)的含义是可以一目了然的。

如果只想在某列中保存日期(年月日),则date即可满足需要;如果想保存日期和时间(年月日时分秒),则要使用datetimetimestampdatatime的区别除表示的时间范围不同之外,是它的值可以在记录增加或被更新时自动生成。



朋友们的留言

  1. Yurii | 十一月 10th, 2009 at 14:01

    补充一下,第一点不够全面
    首先,在GBK内码的情况下,一个汉字占两个字节,但是在UTF-8内码的情况下,一个汉字需要占用三个字节
    其次,在MySQL 5.x版本中,varchar(n)中的n是以“字符”为单位的,因此varchar(10)的列可以容纳10个中文字符

  2. 为之漫笔 | 十一月 10th, 2009 at 17:33

    的确如此,多谢指正。

我来说两句儿


麻烦输入验证码 If you cannot see the CheckCode image,please refresh the page again!