MySQL数据类型

DDL:创建和管理表
DML:增删改查
DCL:1.TCL:commit和roll back 2.

数据类型:
在这里插入图片描述
数据类型的属性:
在这里插入图片描述
指定字符集

#创建数据库时指定字符集
select database() from dual;
create database if not exists test1 character set 'utf8';
show create database test1;

use test1;
#创建表时指定表的字符集
create table if not exists temp(
id int
)character set 'utf8';

show create table temp;

#创建表,指定表中字段时,可以指定字段的字符集
create table if not exists temp1(
name varchar(15) character set 'gbk'
);

show create table temp1;

整型类型

在这里插入图片描述

create table if not exists temp2(
f1 tinyint,
f2 smallint,
f3 mediumint,
f4 integer,
f5 bigint
);

select *from temp2;

insert into temp2(f1)
values(1),(-1),(-5);

在这里插入图片描述在这里插入图片描述
当使用zerofill时,自动添加unsigned(无符号)标志

适用场景
在这里插入图片描述

浮点类型

在这里插入图片描述
在这里插入图片描述
float和double这两种数据类型的区别
float占用字节数少,取值范围小。
double占用字节数多,取值范围也大。

注意
在这里插入图片描述
所以浮点类型不用刻意去加unsigned标志,因为对大于0部分的数据范围无影响。

数据精度说明
在这里插入图片描述

create table if not exists t1(
f1 float,
f2 float(5,2),
f3 double,
f4 double(5,2)
);
insert into t1(f1,f2)
values(123.45,123.45);

在这里插入图片描述
存在四舍五入
在这里插入图片描述
四舍五入后超出范围

#报错
insert into t1(f1,f2)
values(123.45,999.995);
insert into t1(f1)
values(0.47),(0.44),(0.19);

select sum(f1)=1.1 #结果为0,说明0.47+0.44+0.19在该运算中不准确
from t1;

因为浮点数是不准确的,所以要避免使用‘=’来判断两个数是否相等。同时在一些对精确度要求较高的项目中,千万不要使用浮点数,不然会导致结果错误,甚至造成不可挽回的损失。

那么,MySQL有没有精准的数据类型呢?-------定点数类型:DECIMAL

定点数类型

在这里插入图片描述
在这里插入图片描述
浮点数vs定点数
1.浮点数相对于定点数的优点是在长度一定的情况下,浮点类型取值范围大,但不精准,适用于需要取值范围大,又可以容忍微小误差的科学计算场景(比如计算化学、分子建模、流体动力学等)
2.定点数类型取值范围相对小,但是精准无误差。适合对精度要求极高的场景(比如涉及金额计算的场景)

位类型:BIT

BIT类型中存储的是二进制值,类似010110
在这里插入图片描述
BIT类型,如果没有指定(M),默认是1位,表示只能存1位的二进制的位数,位数最小值为1,最大值为64。

比如bit(5)存储最大值二进制数为11111,转换为十进制为31。

若想要查看字段的二进制数或十六进制数,则可以用bin()和hex()。
在这里插入图片描述
和十进制数0相加后可以转换为十进制数。
在这里插入图片描述

日期与时间类型

year类型
在这里插入图片描述
year类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小。只需要一个字节的存储空间。
注意
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
date类型
在这里插入图片描述
在这里插入图片描述
curdate(),current_date(),now()表示当时的年月日
在这里插入图片描述
time类型
在这里插入图片描述
在这里插入图片描述
‘2 12:30:29’中的2表示2天,224+12=60h
‘12:40’表示时和分
‘1 05’中05表示5h,所以1
24+5=29h

在这里插入图片描述
当1210没有加上单引号的时候,表示分和秒。
在这里插入图片描述
now(),current_time(),curtime()
在这里插入图片描述
在这里插入图片描述
datetime类型
在这里插入图片描述
timestamp类型
在这里插入图片描述
在这里插入图片描述
timestamp和datetime的区别
在这里插入图片描述
开发中datetime使用较多。
一般存注册时间、商品发布时间等,不建议使用datetime存储,而是使用时间戳,因为datetime虽然直观但不便于计算。

文本字符串类型

在这里插入图片描述
char与varchar类型
char和varchar类型都可以存储比较短的字符串。
在这里插入图片描述
注意:
当查询长度不满M的字符时,char类型的字段会自动除去尾部的空格,但当我们存储的数据尾部本身就含有空格时,char类型的字段也会将空格除去。

哪些情况使用char或varchar更好
在这里插入图片描述
text类型
在这里插入图片描述

ENUM类型

也叫枚举类型,ENUM类型的取值范围需要在定义字段时进行指定。设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有限制非空的情况下,也可以添加null值。

set类型

set表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为64.设置字段值时,可以取取值范围的0个或多个值。
当set类型包含的成员个数不同时,其所占用的存储空间也是不同的。
在这里插入图片描述
在这里插入图片描述

二进制字符串类型

MySQL中的二进制字符串类型主要存储一些二进制数据,比如可以存储图片、音频和视频等二进制数据。
MySQL中支持的二进制字符串类型主要包括binary、varbinary、tinyblob、blob、mediumblob和longblob类型。
binary和varbinary
在这里插入图片描述
binary和varbinary在实际开发中的应用场景较少,了解一下就行。
在这里插入图片描述
在这里插入图片描述

json类型

在这里插入图片描述

小结及建议

在这里插入图片描述
使用decimal时要指定d和m,比如decimal(5,2),否则默认是decimal(10,0),则会四舍五入舍去小数部分。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值