按照数据类型分类成4大类、
(一)数值类型
整数类型:
所需存储大小(1字节=8bit):
TINYINT 1个字节
SMALLINT 2个字节
MEDIUMINT 3个字节
INT(INTEGER) 4个字节
BIGINT 8个字节
浮点数类型:
所需存储大小(1字节=8bit):
FLOAT 4个字节
DOUBLE 8个字节
定点数类型:DECIMAL(M,D)
M被称为精度,是数据的总位数;D被称为标度,表示数据的小数部分所占的位数。定点数在MySQL内部是以字符串的形式进行存储的,它的精度比浮点数更加精确,适合存储表示金额等需要高精度的数据。
DECIMAL(M,D)类型的数据的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。而DECIMAL的存储空间并不是固定的,由精度值M决定,总共占用的存储空间为M+2个字节。
使用定点数类型表示数据时,当数据的精度超出了定点数类型的精度范围时,则MySQL同样会进行四舍五入处理。
当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。
创建数据表test,在test数据表中包含两个字段,即d1和d2,两个字段的类型分别为DECIMAL和DECIMAL(5,2)。也就是说,d1字段使用默认的精度和标度,d2字段的精度为5,标度为2。
(二)字符串类型
CHAR类型的字段长度是固定的,为创建表时声明的字段长度,最小取值为0,最大取值为255。如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在右侧填充空格以达到指定的长度。当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。对于CHAR类型的数据来说,定义CHAR类型字段时,声明的字段长度即为CHAR类型字段所占的存储空间的字节数。
VARCHAR类型修饰的字符串是一个可变长的字符串,长度的最小值为0,最大值为65535。检索VARCHAR类型的字段数据时,会保留数据尾部的空格。VARCHAR类型的字段所占用的存储空间为字符串实际长度加1个字节。
Text用来保存文本类型的字符串,总共包含4种类型,分别为TINYTEXT(长度为255(28-1)字符)、TEXT(长度为65535(216-1)字符)、MEDIUMTEXT(长度为16777215(244-1)字符)和LONGTEXT(长度为4294967295或4GB(232-1)字符)类型。在向TEXT类型的字段保存和查询数据时,不会删除数据尾部的空格,这一点和VARCHAR类型相同。其中,每种TEXT类型保存的数据长度和所占用的存储空间不同。
ENUM类型也叫作枚举类型,格式:<字段名>('值1','值1','值1'...),ENUM是一个字符串对象,值为表创建时列规定中枚举的一列值,ENUM类型的取值范围需要在定义字段时进行指定,其所需要的存储空间由定义ENUM类型时指定的成员个数决定。当ENUM类型包含1~255个成员时,需要1个字节的存储空间;当ENUM类型包含256~65535个成员时,需要2个字节的存储空间。ENUM类型的成员个数的上限为65535个。
注意:在定义字段时,如果将ENUM类型的字段声明为NULL时,NULL为有效值,默认值为NULL;如果将ENUM类型的字段声明为NOT NULL时,NULL为无效的值,默认值为ENUM类型成员的第一个成员。另外,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。
SET表示一个字符串对象,格式:set('值1','值1','值1'...),可以包含0个或多个成员,但成员个数的上限为64。当SET类型包含的成员个数不同时,其所占用的存储空间也是不同的。
注意:如果插入SET字段中的列有重复,MySQL会自动删除重复的值。
JSON类型,在MySQL 5.7中,就已经支持JSON数据类型。在MySQL 8.x版本中,JSON类型提供了可以进行自动验证的JSON文档和优化的存储结构,使得在MySQL中存储和读取JSON类型的数据更加方便和高效。eg:
(三)日期类型
主要有YEAR类型、TIME类型、DATE类型、DATETIME类型和TIMESTAMP类型。
·DATE类型通常用来表示年月日;
·DATETIME类型通常用来表示年、月、日、时、分、秒;
·TIME类型通常用来表示时、分、秒。
日期和时间类型占用的存储空间,占用存储空间最小的是YEAR类型,总共占用1个字节的存储空间;占用存储空间最大的是DATETIME类型,总共占用8个字节的存储空间。
TIMESTAMP类型也可以表示日期时间,其显示格式与DATETIME类型相同,都是YYYY-MM-DD HH:MM:SS,需要4个字节的存储空间。但是TIMESTAMP存储的时间范围比DATETIME要小很多,只能存储“1970-01-01 00:00:01 UTC”到“2038-01-19 03:14:07 UTC”之间的时间。其中,UTC表示世界统一时间,也叫作世界标准时间。
使用函数CURRENT_TIMESTAMP()和NOW()可以向TIMESTAMP类型的字段插入系统的当前时间。
实际上,TIMESTAMP在存储数据的时候是以UTC(世界统一时间,也叫作世界标准时间)格式进行存储的,存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。
(四)二进制类型
二进制字符串类型主要存储一些二进制数据,比如可以存储图片、音频和视频等二进制数据。主要包括BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB类型。
BIT类型中,每个值的位数最小值为1,最大值为64,默认的位数为1。BIT类型中存储的是二进制值。
BINARY类型为定长的二进制类型,当插入的数据未达到指定的长度时,将会在数据后面填充“\0”字符,以达到指定的长度。同时BINARY类型的字段的存储空间也为固定的值。
VARBINARY类型为变长的二进制类型,长度的最小值为0,最大值为定义VARBINARY类型的字段时指定的长度值,其存储空间为数据的实际长度值加1。
BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB 4种类型,可以存储一个二进制的大对象,比如图片、音频和视频等。
需要注意的是,在实际工作中,往往不会在MySQL数据库中使用BLOB类型存储大对象数据,通常会将图片、音频和视频文件存储到服务器的磁盘上,并将图片、音频和视频的访问路径存储到MySQL中。
--ps:
额外说一下MySQL的变量:
用户自定义变量:以@开头
系统变量:以@@开头,并分为全局变量和会话变量
全局变量:show global variables;
会话变量:show session variables;
--请尊重原创,转载请注明出处