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

3.2 数据类型

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

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

1.数值类型

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

表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。

2.字符串类型

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

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

说明:

● 对于变长字符串类型,其长度取决于实际存放在数据列中的值的长度,该长度在表3-3中使用L来表示,L以外所需要的额外字节为存放L本身的长度所需要的字节数。

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

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

● CHAR类型要比VARCHAR类型效率更高,但占用空间较大。

● BLOB和TEXT类型都可以存放任意大数据的数据类型,但两者区别是BLOB类型区分大小写,而TEXT类型不区分大小写。

3.日期/时间类型

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

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

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

4.NULL值

NULL意味着“没有值”或“未知值”,可以将NULL值插入到数据表中并从表中检索它们,也可以测试某个值是否为NULL,但能对NULL值进行算术计算。如果对NULL值进行算术运算,其结果还是NULL。在MySQL中,0或NULL都意味着假,而其余值都意味着真。