序号 | 系列文章 |
---|---|
1 | 【MySQL】MySQL介绍及安装 |
2 | 【MySQL】MySQL基本操作详解 |
3 | 【MySQL】MySQL基本数据类型 |
MySQL的数据类型包括整型类型,浮点数类型,定点数类型,位(BIT)类型等。
MySQL的整型类型用于保存整数,根据取值范围的不同,整数类型可划分为5种。
整数类型 | 字节 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32767 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 |
INT | 4 | 0~4294967295 | -2147483648~2147483647 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854774808~9223372036854774807 |
不同整数类型的取值范围是通过字节数计算出来的,一个字节数等于8位二进制数。
例如,TINYINT类型无符号数的最大值为2^8-1(即为255), 有符号数的最大值为2^7-1(即为127)。
其他类型的数据类型的取值范围根据同样的方法可得出。
若使用无符号数据类型,需要在数据类型右边添加UNSIGNED关键字。
例如INT UNSIGNED表示无符号INT类型。
为了能够更好的理解整型以及其注意事项,实例如下
知识点:
扩展1:为字段设置零填充和宽度操作
知识点:
扩展2:如何选择最适合的整型数据类型?
在选择使用何种整数类型的时候,我们只需要重点考虑两方面,即存储空间和可靠性。
一方面,用占用字节数少的整数类型可以节省存储空间;另一方面,要是为了节省存储空间,使用的整数类型取值范围太小,一旦遇到超出取值范围的情况,就可能引起系统错误 ,影响可靠性。
切记:在实际工作中,因系统故障产生的成本远远超过增加几个字段存储空间所产生的成本,所以建议在确保数据不会超过取值范围的情况下,再去考虑如何节省存储空间。
扩展3:各整数数据类型的使用场所
在MySQL中,存储的小数都是使用浮点数或定点数来表示的。浮点数的类型有2种,分别为单精度浮点数类型(float)和双精度浮点类型(double)。
数据类型 | 字节数 | 取值范围 |
---|---|---|
FLOAT | 4 | -2^128~2 ^128,即-3.40E+38~+3.40E+38 |
DOUBLE | 8 | -2^1024~ 2^1024,即-1.79E+308~1.79E+308 |
知识点:
为了能够更好的理解浮点数以及其注意事项,实例如下:
定点数类型(DECIMAL)通过DECIMAL(M,D)设置位数和精度。
为了能够更好的理解定点数以及其注意事项,实例如下:
知识点:
扩展1:定点数的存储空间
DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。
定点数(DECIMAL) 的存储空间并不是固定的,是由精度值M来决定的,总共占用的存储空间为M+2个节。
也就是说,在一些对精度要求不高的场景下,比起占用同样字节长度的定点数,浮点数表达的数值范围可以更大一些。
扩展2:定点数与浮点数的对比及应用
扩展3:注意点及建议
BIT(位)类型用于存储二进制数据,语法为BIT(M),M表示位数,范围为1~64。
函数 | 函数用途 |
---|---|
BIT(M) | 存储二进制数据 |
ASCll(M) | 获取M的ASCll值 |
BIN(M) | 获取M的二进制值 |
LENGTH(M) | 获取M的数字长度 |
知识点:
直接常量指的是在MySQL中直接编写的字面常量,如数字1253,字符串’abc’等,常用于在INSERT语句中编写插入的数据。
直接常量具有多种语法形式,可分为6类。
1)十进制数
十进制数:语法近似于我们日常使用的数字,如12,-12,-1.2,以及科学计数法1E2,1E-2(E不区分大小写)。
2)二进制数
二进制数:在二进制字符串前面加前缀b,形如b‘10000001’。
上述示例通过SECLECT b‘10000001’;语句可查看二进制转为ASCll字符后的结果,即字符A。
3)十六进制数
十六进制数:有两种表示方式,分别为:在十六进制字符串前面加前缀0x或在十六进制字符串前面加前缀x,形如0x‘41’或x’41’。
上述示例通过SECLECT 0x‘41’;语句可查看十六进制转为ASCll字符后的结果,即字符A。
上述示例通过SECLECT HEX(65);语句可查看十进制转为十六进制的结果,即41。
4)字符串
字符串:MySQL支持单引号和双引号定界符,形如"abc"和’abc’,推荐使用单引号定界符。
若要在单/双引号字符串中书写单/双引号,需要在单/双引号前面添加反斜杠\转义,即"\ ’ “和” \ " "。
常见转义字符:
转义字符 | 含义 | 转义字符 | 含义 |
---|---|---|---|
\0 | 空字符(NUL) | \t | 制表符(HT) |
\r | 回车符(CR) | \b | 退格(BS) |
\n | 换行符(LF) | \ ’ | 单引号 |
\ " | 双引号 | % | %(常用于LIKE条件) |
\ \ | 反斜杠 | \ _ | _(常用于LIKE条件) |
5)布尔值
布尔值:TRUE和FALSE两个值(不区分大小写),通常用于逻辑判断,表示事物的真和假。
在SELECT,INSERT等语句中使用布尔值,TRUE会转换为1,FALSE会转换为0。
6)NULL值
NULL值:通常用于表示没有值,值不确定等含义。
例如,在插入一条商品数据时,暂时不知道该商品的库存量,可将此设为NULL。
为了方便在数据库中存储日期和时间,MySQL提供了表示日期和时间的数据类型。
为了更直观的学习这五种表示日期和时间的数据类型,简单归纳如下:
数据类型 | 字节 | 取值范围 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 3 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | -838:59:59~838:59:59 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
知识点:
YEAR类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小,只需要1个字节的存储空间,格式为YYYY。
在MySQL中,可使用以下3种格式指定TEAR类型的值:
知识点:
当使用YEAR类型时,一定要区分0和’0’。
数字格式的0表示的YEAR值为0000
字符串格式的’0’表示的YEAR值为2000
DATE类型用来表示日期值,不包含时间部分,需要 3个字节 的存储空间,且其格式为 YYYY-MM-DD 。其中,YYYY表示年份,MM表示月份,DD表示日期。
在MySQL中,可以使用以下4种格式指定DATE类型的值:
注意:
通过"SELECT CURRENT_DATE;"或者"SELECT NOW();"可查询当前日期。
日期中的分隔符"-“,还可以使用”.“”,“”/"等符号来表示。
TIME类型用于表示时间值,它的显示形式一般为HH:MM:SS,其中HH表示小时,MM表示分,SS表示秒。
在MySQL中,可以使用以下3种格式指定TIME类型的值:
DATETIME类型在所有的日期时间类型中占用的存储空间最大,总共需要 8 个字节的存储空间,用来表示日期和时间,它的显示形式为’YYYY-MM-DD HH:MM:SS’。
在MySQL中,可以使用以下4种格式指定DATETIME类型的值:
TIMESTAMP(时间戳)类型用于表示日期和时间,需要4个字节的存储空间,它的显示形式与DATETIME类型的相同,但取值范围比DATETIME类型的小。
TIMESTAMP类型与DATETIME类型的不同形式:
知识点:
在MySQL中,TIMESTAMP字段默认情况下会自动设置NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP属性。
存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。
MySQL中的字符串类型分别为CHAR,VARHAR,TEXT等多种类型,不同数据类型具有不同的特点。
数据类型 | 类型说明 |
---|---|
CHAR | 固定长度字符串 |
VARCHAR | 可变长度字符串 |
TEXT | 大文本数据 |
ENUM | 枚举类型 |
SET | 字符串类型 |
BINARY | 固定长度的二进制数据 |
VARBINARY | 可变长度是二进制数据 |
BLOB | 二进制大对象 |
CHAR和VARCHAR类型都是用来保存字符串数据,两者不同的是,VARCHAR可以存储可变长度的字符串数据。
字符串类型 | 特点 | 长度 | 长度范围 | 占用的存储空间 |
---|---|---|---|---|
CHAR(M) | 固定长度 | M | 0<=M<=255 | M个字节 |
VARCHAR(M) | 可变长度 | M | 0<=M<=65535 | (实际长度 + 1) 个字节 |
在MySQL中,定义CHAR和VARCHAR类型的语法格式为:
CHAR(M)
VARCHAR(M)
知识点:
扩展1:CHAR(4)和VARCHAR(4)存储需求对比:
插入值 | CHAR(4)存储需求 | VARCHAR(4)存储需求 |
---|---|---|
‘a’ | 4字节 | 1字节 |
‘ab’ | 4字节 | 3字节 |
‘abc’ | 4字节 | 4字节 |
‘abcd’ | 4字节 | 5字节 |
扩展2:CHAR(M)和VARCHAR(M)的特点及应用环境
类型 | 特点 | 空间 | 时间 | 使用场景 |
---|---|---|---|---|
CHAR(M) | 固定长度 | 浪费存储空间 | 效率高 | 存储不大,速度要求高 |
VARCHAR(M) | 可变长度 | 节省存储空间 | 效率低 | 非CHAR情况 |
注意事项:
TEXT类型用于保存大文本数据,例如,文章内容,评论等比较长的文本。
数据类型 | 存储范围 | 存储空间占用量 | 特点 |
---|---|---|---|
TINYTEXT(tinytext) | 0~2^8-1 | 文本长度+2 | 小文本,可变长度 |
TEXT(text) | 0~2^16-1 | 文本长度+2 | 文本,可变长度 |
MEDIUMTEXT(mediumtext) | 0~2^24-1 | 文本长度+3 | 中等文本,可变长度 |
LONGTEXT(longtext) | 0~2^32-1 | 文本长度+4 | 大文本,可变长度 |
ENUM类型又称为枚举类型,其定义格式为:
ENUM('值1','值2','值3','值4','值5',....,'值n')
ENUM类型的取值范围需要在定义字段时进行指定。
设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。
其所需要的存储空间由定义ENUM类型时指定的成员个数决定。
为了能够更好的理解ENUM类型以及其注意事项,实例如下:
SET类型用于保存字符串对象,其定义格式与ENUM类型相似。
SET('值1','值2','值3','值4','值5',....,'值n')
其所需要的存储空间由定SET类型时指定的成员个数决定。
SET类型包含的成员数 | 存储空间 |
---|---|
1~8 | 1个字节 |
9~16 | 2个字节 |
17~24 | 3个字节 |
25~32 | 4个字节 |
33~64 | 8个字节 |
SET类型在存储数据时成员个数越多,其占用的存储空间越大。
SET类型在选取成员时,与ENUM类型不同,其可以一次选择多个成员。
为了能够更好的理解SET类型以及其注意事项,实例如下:
BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是,它们所表示的是二进制数据。
类型 | 特点 | 长度 | 长度范围 | 占用的存储空间 |
---|---|---|---|---|
BINARY(M) | 固定长度 | M | 0<=M<=255 | M个字节 |
VARBINARY(M) | 可变长度 | M | 0<=M<=65535 | (M+ 1) 个字节 |
BINARY和VARBINARY类型的定义形式:
BINARY(M)
VARBINARY(M)
BLOB类型用于保存数据量比较大的二进制数据,如图片,PDF文档等。
数据类型 | 存储范围 | 占用空间 |
---|---|---|
TINYBLOB | 0~2^8 -1字节 | len+1个字节 |
BLOB | 0~2^16 -1字节(相当于64KB) | len+2个字节 |
MEDIUMBLOB | 0~2^24 -1字节(相当于16MB) | len+3个字节 |
LONGBLOB | 0~2^32 -1字节(相当于4GB) | len+4个字节 |
注意:
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 ,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。它易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式。
在MySQL 5.7中,就已经支持JSON数据类型。在MySQL中,JSON类型常见的表示方式有2种,分别为JSON数组和JSON对象。
#JSON数组
['abc',10,null,true]
#JSON对象
{"k1":"value","k2":10}
知识点:
为了能够更好的理解JSON数据类型以及其注意事项,实例如下:
这就是本期博客的全部内容啦,想必大家已经对MySQL中的基本数据类型有了全新地认识和理解吧,如果有什么其他的问题无法自己解决,可以在评论区留言哦!
最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞,评论✍,收藏),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!