> 技术文档 > 【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

文章目录

  • MySQL 数据类型
    • 1. 数值类型
      • tinyint类型
      • BIT类型
      • float类型和decimal类型
    • 2. 日期和时间类型
    • 3. 字符串类型
      • char和varchar类型
    • 3. 枚举和集合类型
      • enum和set

MySQL 数据类型表

1. 数值类型

类型 字节 说明 TINYINT 1 8 位整数,范围 -128127(无符号时 0255SMALLINT 2 16 位整数,范围 -32,76832,767(无符号时 065,535MEDIUMINT 3 24 位整数,范围 -8,388,6088,388,607(无符号时 016,777,215INT / INTEGER 4 32 位整数,范围 -2,147,483,6482,147,483,647(无符号时 04,294,967,295BIGINT 8 64 位整数,范围 -9,223,372,036,854,775,8089,223,372,036,854,775,807(无符号时 018,446,744,073,709,551,615DECIMAL(M, D) / NUMERIC(M, D) 变长 精确浮点数,M 是总位数,D 是小数位数 FLOAT 4 单精度浮点数,精度约 7DOUBLE / REAL 8 双精度浮点数,精度约 16

数值类型中我们着重讲解tinyint类型和int类型还有float类型和decimal类型

tinyint类型

tinyint类型和C++中的char的范围是一样的,当我们需要一个小的数值类型时,我们可以选择tinyint。
我们创建一个只有tinyint的表,然后向其插入数据:
验证tinyint类型的范围
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
在创建表的时候我们可以在tinyint类型后面加上unsigned,使其变成无符号类型:
无符号类型的数据返回时由以前的-128到127变成了0到255
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

BIT类型

基本语法:

bit[(M)] : 位字段类型。M表示每个值的位数,范围从164。如果M被忽略,默认为1

【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
我们创建一张表,然后测试BIT类型的范围,可以看见,当超过BIT类型的最大范围的时候,操作是不被允许的。
通常我们查询的时候,前面都带有0X样式的十六进制:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
查看十进制样式
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

float类型和decimal类型

float类型
基本语法:

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

我们创建一张表:
注意:中括号中的第一个数字表示最高有多少位数字,包含小数点后的数字,第二个数字表示小数点后一共有多少位数字
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
我们这里创建的是最多4个数,最多显示两位小数:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
上面这个是最坏的情况,当我们插入非法的数据的时候也会被阻止:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

不管是float还是decimal,都是有四舍五入的性质的,假如我们只要求保留2位小数,我们加上第三位小数,这里第三位小数会被四舍五入,如果四舍五入之后的数字是合法的那么会被插入到表中,如果不合法则会报错


decimal
float类型和decimal类型都是小数类,有什么区别呢,有个很大的区别就是精度问题,当我们需要的精度很大时最好还是选择decimal,这里我们做一个测试,测试一下decimal和float的精度:
我们创建一张同时有float类型和decimal类型的表
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
向两张表中插入相同的数据,然后比较精度:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
可以看到decimal完全符合要求。

2. 日期和时间类型

类型 字节 说明 DATE 3 仅存储日期,格式 YYYY-MM-DD,范围 1000-01-019999-12-31 DATETIME 8 日期 + 时间,格式 YYYY-MM-DD HH:MM:SS TIMESTAMP 4 时间戳,格式 YYYY-MM-DD HH:MM:SS,自动更新,范围 1970-01-012038-01-19 TIME 3 仅存储时间,格式 HH:MM:SS,范围 -838:59:59838:59:59 YEAR 1 存储 4 位年份(19012155
date :日期 \'yyyy-mm-dd\' ,占用三字节datetime 时间日期格式 \'yyyy-mm-dd HH:ii:ss\' 表示范围从 10009999 ,占用八字节timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节

日期类型没有什么好说的,只是表现形式不同,timestamp可以用来获取当前时间。
我们创建一张三个类型的表:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
插入数据:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
可以看见,很简单的三个类型。

3. 字符串类型

类型 字节 说明 CHAR(M) M 固定长度字符串(0-255VARCHAR(M) 变长 可变长度字符串(0-65535,取决于 row formatTEXT 变长 长文本,最大 65535 字节 TINYTEXT 变长 最多存储 255 字节 MEDIUMTEXT 变长 最多存储 16,777,215 字节 LONGTEXT 变长 最多存储 4,294,967,295 字节 BLOB 变长 二进制大对象 TINYBLOB 变长 最多存储 255 字节 MEDIUMBLOB 变长 最多存储 16,777,215 字节 LONGBLOB 变长 最多存储 4,294,967,295 字节

char和varchar类型

char类型
基本语法:

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

注意:char类型括号中代表的是字符串长度,虽然中文汉字占3个字节,但是如果我们定义的char(2)还是可以插入两个汉字,这里的字符是指符号,而不是像C++中的一个字符占几个字节的那种。


varchar类型
基本语法:

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

varchar和char的区别就是char是固定大小的,而varchar是假如我们定义的是varchar(32),我们用多少varchar只开辟多少,而char是原本就是多少,不管我们用多少,这个char都是那么大
但是varchar65535中有3个字节是用来管理的。
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

3. 枚举和集合类型

类型 说明 ENUM(\'value1\', \'value2\', ...) 枚举类型,存储单选值,最多可定义 65,535 个选项 SET(\'value1\', \'value2\', ...) 集合类型,存储多选值,最多可定义 64 个选项

enum和set

enum只支持单选1,而set支持多选多
我们创建一张表对比一下这两个类型:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
插入数据:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

set插入多个数据:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示

查找数据
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
我们已set为基准查找:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
可以看见mick被排除在外了,因为mick有多个爱好,所以我们应该用一个函数:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示
假如我们需要筛选两个标准:
【MySQL】数据类型_数据库中借阅天数用什么数据类型表示