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

相关推荐
不剪发的Tony老师32 分钟前
Mathesar:一款基于PostgreSQL的在线电子表格
数据库·postgresql·电子表格
万邦科技Lafite3 小时前
京东按图搜索京东商品(拍立淘) API (.jd.item_search_img)快速抓取数据
开发语言·前端·数据库·python·电商开放平台·京东开放平台
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于Android的综合社交系统为例,包含答辩的问题和答案
android
金仓拾光集4 小时前
__金仓数据库平替MongoDB实战:从多模兼容到高可用落地__
数据库·mongodb·数据库平替用金仓·金仓数据库
北邮-吴怀玉4 小时前
6.1.2.2 大数据方法论与实践指南-离线任务SQL 任务开发规范
大数据·数据库·sql
流烟默4 小时前
MongoDB索引创建语法分析
数据库·mongodb
金仓拾光集4 小时前
__国产化转型实战:制造业供应链物流系统从MongoDB至金仓数据库迁移全指南__
数据库·mongodb·数据库平替用金仓·金仓数据库
初学者_xuan4 小时前
零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-Redis数据库基础
运维·数据库·自动化
小马哥编程4 小时前
【软考架构】案例分析:MongoDB 如何存储非结构化数据以及其矢量化存储的优点。
数据库·mongodb·架构
默 语5 小时前
MySQL中的数据去重,该用DISTINCT还是GROUP BY?
java·数据库·mysql·distinct·group by·1024程序员节·数据去重