初识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

相关推荐
Kapaseker22 分钟前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴1 小时前
Android17 为什么重写 MessageQueue
android
倔强的石头_16 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android