初识MYSQL —— 数据类型

前言

了解了数据库和数据表的相关操作,现在来学习数据库中能够存储的数据类型

数据类型分类

MYSQL数据库中,常见的类型如上图所示,现在来依次了解这些数据类型。

数值类型

1. 整数类型

常见的整数类型:

这些整数类型字节大小不同,能存储的数据范围就有所不同。

例如:TINYINT1字节,数据范围:[-128, 127];无符号TINYINT类型数据范围:[0 , 255]

这里以TINYINT为例,做一下数据的插入,其他的整数类型类似。

要创建无符号tinyint类型的字段,在创建数据表时在字段后面带上unsigned即可。

2. bit类型

上述的整数类似,大小都以字节为单位;而位字段类型 是以bit位为单位的。

在创建数据表时,也可以以bit为单位,创建字段。

复制代码
a bit(M)

在创建数据表时,可以通过M指明所占用的bit位数;M取值范围:[1 , 64];(如果忽略M,默认就是1

可以看到,1bit位的数据范围是[0 , 1],依次类推,2bit位的数据范围就是[0, 3]

在上述插入数据的操作中,在使用select查看数据时,查看不到bit字段的01

**bit字段在显示时,是按照ASCII码对应的值显示 **

我们查看不到bit字段的01,是因为01ASCII码对应的字符不可显示;

这里我们插入97-a这些数值,我们就能够使用select查看到插入的数据了。

2. 浮点数类型

mysql数据库当中,除了可能已存储整数、bit位字节类型数据,还可以存在浮点数类型。

常见的浮点数类型:floatdoubledecimal

float类型

定义float类型的格式:float(m,d)(也可以指定定义float

m表示指定显示长度,d表示小数位数。

例如:float(4,2),显示长度4,小数位数2,数据范围就是-99.99 ~ 99.99


注意:如果设置成无符号(float(4,2) unsigned),数据范围就是 :0 ~ 99.99

decimal类型

decimal类型使用和float的使用一样,都是可以指明显示长度和小数位数。

decimal(5,2)类型数据范围:-999.99 ~ 999.99

decimal(5,2) unsigned数据范围: 0 ~ 999.99

decimalfloat的区别

精度不同

decimal想比于float,精度更高。

如果需要小数的精度更高,就可以使用decimal

sql 复制代码
FLOAT(M,D)        -- M=总位数,D=小数位;MySQL 8.0.17 起被废弃,仅保留 FLOAT
DOUBLE(M,D)       -- 同上,8.0.17 起也废弃
DECIMAL(M,D)      -- 默认 (10,0);M≤65,D≤30,且 D≤M

文本类型

1. char

char类型是固定长度字符串,在使用时需要指明长度。

sql 复制代码
char(L)  -- L表示存储的长度,单位是字符,最大长度为255

注意,这里单位是字符,一个中文汉字也是一个字符。

2. varchar

varchar是可变长度字符串,在使用时需要指明字符串最大长度;

sql 复制代码
varchar(L)  -- L表示字符串最大长度

varchar(len)len的最大值

varchar可以支持0 ~ 65535字节长度,其中有1-3字节用来记录数据大小;有效字符长度字节数是65532

  • 如果表的编码是utf8,一个字符占3个字节,varchar(len)len的最大值:65532/3 = 21884
  • 如果表的编码是gbk,一个字符占2个字节,varchar(len)len的最大值:65532/2 = 32766


这里表编码集是utf8len最大值就是21845,指明长度超过21645就会报错。(让我们使用TEXT文本类型)

charvarchar的区别:

char是定长字符串,varchar可变长字符串,varchar的变长体现在哪里呢?

在定义时,varchar指明的是字符串的最大长度,而char指明的是字符串的长度。

  • char在实际存储时,无论字符串长度为多少,存储的都是固定的长度。
  • varchar在实际存储时,会根据实际字符串的长度,动态存储。
  • 定长:直接开辟好对应的空间;磁盘空间比较浪费,但是效率高。
  • 变长:在不超过自定义范围的情况下,用多少空间,就开辟多少空间。磁盘空间相对节省,但效率低。

如果存储数据长度固定,就使用定长char

如果存储数据长度有变化,就使用变长varchar

时间和日期

mysql中,除了存储数值和文本类型,还可以存储时间。

常见的时间类型:

  • date : 日期;格式yyy-mm-dd3字节大小。
  • datetime : 日期时间;格式yyy-mm-dd HH:ii:ss4字节大小。
  • timestamp :时间戳;1970年开始格式与datetime完全一致,4字节大小

对于日期date、日期时间datetime还是非常容易理解的;这里主要看一下时间戳:

时间戳timestamp,它会自动更新,不需要我们显示插入。

简单来说就是:在插入数据时,时间戳这一列会自动插入(获取当前时间);在数据更新时,时间戳也会自动更新。

枚举类型

枚举类型,简单来说就是:提供若干个选项的值,在插入时在这些选项中选择一个或者若干个值插入。

1. enum

语法:

sql 复制代码
enum('选项1','选项2','选项3',...)

enum是提供若干个选项的值,但在最终的一个单元格中,实际存储了其中一个值。(在插入数据时选择其中一个插入)。

这些值实际存储的都是数字,因为每一个选项都一次对应一个数字:1,2,3,...。(在插入时,也可以选择数字插入

例如:在信息表中,要记录性别,就可以使用enum枚举

2. set

enum是枚举多个选项,选择其中一个插入,而set则是提供多个选项值,选择其他若干个进行插入。

sql 复制代码
set('选项1','选项2','选项3',...)

在插入时和enum类似,可以使用若干个选项值进行插入,也可以使用数字进行插入。(存储的都是数字

但是set的这个数字和enum有所不同:

  • enum中的数字类似于下标,1开始 (因为enum只选择一个选项值进行插入)
  • set中使用的数字可以当中位图,使用二进制中一个bit位表示是否插入该选项(因为set可以选择若干个选项值进行插入)

位图:

  • 0对应二进制:0000 0000,插入空数据;
  • 3对应二进制:0000 0011,插入选项1,选项2。

例如,在表中要存储爱好,每个人爱好都可能存在多个,此时就可以使用set


本篇文章到这里就结束了,感谢支持

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

相关推荐
MoRanzhi12032 小时前
12. Pandas 数据合并与拼接(concat 与 merge)
数据库·人工智能·python·数学建模·矩阵·数据分析·pandas
William_cl3 小时前
【连载3】MySQL 的 MVCC 机制剖析
数据库·mysql
235163 小时前
【MySQL】MVCC:从核心原理到幻读解决方案
java·数据库·后端·sql·mysql·缓存
zym大哥大3 小时前
高并发内存池
服务器·数据库·windows
. . . . .3 小时前
数据库迁移migration
数据库
shixian10304113 小时前
Django 学习日志
数据库·学习·sqlite
IT 小阿姨(数据库)5 小时前
PostgreSQL通过pg_basebackup物理备份搭建流复制备库(Streaming Replication Standby)
运维·服务器·数据库·sql·postgresql·centos
小蒜学长5 小时前
springboot基于javaweb的小零食销售系统的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
云边有个稻草人5 小时前
从内核调优到集群部署:基于Linux环境下KingbaseES数据库安装指南
linux·数据库·金仓数据库管理系统