MySQL数据库支持的数据类型不可谓不丰富,本文会讨论一些常用的数据类型及相关属性,如空值和默认值、整数、实数、文本、布尔型、日期和时间等。
MySQL数据库中,空值的含义为没有数据,使用null关键字表示。请注意,没有数据和数值0是不同的概念,如判断f1字段是否为0时可以使用“f1=0”,而判断f1字段数据是否为空时使用“f1 is null”。
定义字段类型时,默认情况下是允许空值的,如“f1 int”中,f1字段就可以为空值(null)。如果指定字段数据不能为空值,则需要添加not null,如“f1 int not null”。
如果字段没有设置默认值,又没有指定数据,那么默认值就是空值(null),如果指定字段数据不能为空(not null)则必须指定一个有效的数据。定义字段类型时,可以使用default关键字指定默认值,如“f1 int not null default 0”就是指定f1字段为int类型,不能为空,默认值为0。
MySQL中的整数类型比较多,常用的有int(或integer)和bigint类型;其中:
int类型处理32位整数,处理范围在-2,147,483,648到+2,147,483,647,添加unsigned关键字定义为32位的无符号整数类型,取值范围从0到4,294,967,295。
bigint类型处理64位整数,处理范围在-9,223,372,036,854,775,808到+9,223,372,036,854,775,807。添加unsigned关键字定义为64位的无符号整数类型,取值范围从0到18,446,744,073,709,551,615。
处理数据记录时,一般会使用一个整数字段作为记录ID,如前一篇文章中创建的t1表中定义的recid字段,如下面的代码。
recid bigint not null auto_increment primary key
其中,recid为字段名;bigint将字段定义为64位整数类型;not null表示字段数据不允许为空值;auto_increment定义为自增长字段,字段数据可以自动管理,不需要显式添加此字段数据,第一条记录的值为1,然后每条记录自动增加1;primary key将字段定义为主键字段,每条记录的主键字段数据是唯一的,由于字段同时定义为自增长字段,所以,字段数据可以自动管理。
此外,整数ID一般为大于0的值,在定义整数ID字段时也可以使用无符号类型,如bigint unsigned,此时,ID数据的范围就可以多出一倍。
实数类型可以处理包含小数位的数据,这里着重了解decimal类型,其定义格式为decimal(m,d),其中,m定义整数和小数部分共有多少位,最大位数为65;d定义小数有多少位,最大为30位。
decimal类型同时指定了数据的全部位数和小数位,可以进行更加精确的计算,工作中应根据数据范围和精度的要求进行合理定义。如decimal(6,2)处理的数据格式就是“1234.56”、“-1234.56”;保存decimal类型的数据时,如果超出了指定的位数,则多余的数据会进行四舍五入。
MySQL数据库中,文本数据类型主要包括定长文本、变长文本和长文本。其中,定长文本使用char类型定义,变长文本使用varchar类型定义,常用的长文本类型有text类型,最多支持65535个字符,longtext类型,最多支持4,294,967,295个字符(或4GB)。
定长文本需要指定允许的字符数量,如char(n),可用于保存固定长度的数据,如保存身份证号码的字段可以定义为char(18)。
变长文本需要指定允许的最大字符数据,如varchar(n),其中,n为允许的最大字符数量,如保存地址的字段类型可以定义为varchar(50)。
在MySQL数据中,虽然可以使用bool或boolean关键字定义数据类型,但它是tinyint(1)类型的同义词,实际应用中,常约定1表示真值(true),0表示假值(false)。
tinyint类型是最小的整数类型,占用1个字节,处理数据范围为-128到127之间,处理无符号类型(tinyint unsigned)时,数据范围为0到255。
MySQL数据库中,基本的日期和时间类型包括:
请注意,日期和时间类型的数据需要使用一对单引号定义。
此外,MySQL还支持一系列的时间戳(timestamp)类型,如:
本文介绍了常用的整数类型、实数类型、文本类型、日期和时间类型、空值和默认值等概念;在后续的学习中还会结合不同的数据类型讨论更多操作。