MySQL数据库应用与管理 第2版
上QQ阅读APP看书,第一时间看更新

3.2 数据类型

为了能方便地管理和使用数据,需要对数据进行分类,形成各种数据类型。在创建表结构时需要确定表中每列的数据类型,只有这样,系统才会在磁盘上开辟相应的空间,用户才能向表中填写数据。

MySQL的数据类型主要分为三大类:数值类型、字符串类型和日期/时间类型。

3.2.1 数值类型

MySQL中的数值类型分为整型和浮点型两种。而整型中又分为TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT五种;浮点型又分为FLOAT、DOUBLE、DECIMAL三种。数值类型及其取值范围如表3-2所示。

3.2.1

表3-2 数值类型及其取值范围

说明:

●在整数类型后面加上UNSIGNED属性,表示声明的是无符号数。例如声明一个INT UNSIGNED的数据列,其取值从0开始。

● 声明整数类型时,可以为它指定一个显示宽度(1~255),例如INT(3),指定显示宽度为3个字符;如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只是用于显示,并不能限制取值范围,例如可以把12345存入INT(3)数据列中。

●在整数类型后面加上ZEROFILL属性,表示在数值之前自动用0补齐不足的位数。例如将5存入一个声明为INT(3) ZEROFILL的数据列中,查询输出时,输出的数据将会是005。当使用ZEROFILL属性修饰时,则自动应用UNSIGNED属性。

● 声明浮点数类型时,可以为它指定一个显示宽度指示器和一个小数点指示器。例如FLOAT(7,2)表示显示的值不超过7位数字,小数点后面带有2位数字,存入的数据会被四舍五入,比如3.1415存入后的结果是3.14。

3.2.2 字符串类型

3.2.2

字符串类型可以用来存储任何一种值,所以它是最基本的数据类型之一。MySQL支持以单引号或双引号包含的字符串,例如"MySQL"、'MySQL',它们表示的是同一个字符串。字符串类型及其取值范围如表3-3所示。

表3-3 字符串类型及其取值范围

说明:

●在使用CHAR类型时,如果传入的值的长度小于指定长度,会使用空格将实际长度填补至指定长度;而在使用VARCHAR类型时,如果传入的值的长度小于指定长度,实际长度即为传入字符串的长度,不会使用空格填补。CHAR和VARCHAR类型可以设置默认值。

● 在使用CHAR和VARCHAR类型时,当实际传入值的长度大于指定的长度,字符串会被截取至指定长度;CHAR(n)或VARCHAR(n)表示可以存储 n 个字符(注意:不是 n个字节)。

● 字符集对CHAR类型没有影响,因此CHAR(n)中的 n最大为255;但是字符集对VARCHAR类型是有影响的,如果使用的是UTF8字符集,每个字符大小为3字节,最大支持21845(65535/3=21845)个字符,因此VARCHAR(n)中的n最大为21845。如果想存储更长的字符串,建议选用TEXT类型。

● BLOB相关类型一般用来存储图片、声音和视频等二进制文件;TEXT相关类型一般用来存储大量的字符串,可以将其理解为超大的CHAR或者VARCHAR类型。BLOB和TEXT相关类型不可以设置默认值。字符集对BLOB相关类型没有影响,但对TEXT相关类型有影响。

3.2.3 日期/时间类型

日期/时间类型是用来存储诸如“2016-9-1”或者“12:30:00”的日期/时间的值。日期/时间类型及其取值范围如表3-4所示。

3.2.3

表3-4 日期/时间类型及其取值范围

说明:在存储日期/时间类型数据时,也可以使用整型来存储UNIX时间戳,这样便于进行日期的计算。