MySQL中级学习 (五) MySQL入门--数据类型

按照数据类型分类成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、MEDIUMBLOBLONGBLOB类型。

BIT类型中,每个值的位数最小值为1,最大值为64,默认的位数为1。BIT类型中存储的是二进制值。

BINARY类型为定长的二进制类型,当插入的数据未达到指定的长度时,将会在数据后面填充“\0”字符,以达到指定的长度。同时BINARY类型的字段的存储空间也为固定的值。

VARBINARY类型为变长的二进制类型,长度的最小值为0,最大值为定义VARBINARY类型的字段时指定的长度值,其存储空间为数据的实际长度值加1。

BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOBLONGBLOB 4种类型,可以存储一个二进制的大对象,比如图片、音频和视频等。

需要注意的是,在实际工作中,往往不会在MySQL数据库中使用BLOB类型存储大对象数据,通常会将图片、音频和视频文件存储到服务器的磁盘上,并将图片、音频和视频的访问路径存储到MySQL中。

--ps:

额外说一下MySQL的变量:

用户自定义变量:以@开头

系统变量:以@@开头,并分为全局变量和会话变量

全局变量:show global variables;

会话变量:show session variables;

--请尊重原创,转载请注明出处

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evans-Liang

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值