MYSQL数据类型

目录

​编辑

数据类型分类

数值类型

tinyint

bit

小数类型

float

decimal

字符串类型

char

varchar

日期和时间类型

enum和set类型


数据类型分类

MYSQL中,常见的数据类型如下表所示:

数值类型

常见的几个数值类型的字节数和范围如下所示:

tinyint

这里以tinyint为例,插入数值类型时,插入的数据必须在对应的范围内,如果在MYSQL中插入不合法的数据,MYSQL一般都会直接拦截,如下所示:

所以,在MYSQL中,数据类型本身也是一种约束,这种约束主要是为了让使用者尽可能进行正确的插入,有了这种约束,就能保证数据库中的数据是可预期的,并且是完整的。

bit

在MYSQL中,也支持比特位类型,默认值为1,范围为1-64。如下所示:

小数类型

float

float的语法如下:

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

示例如下:

如果传入的小数精度比定义的要多,MYSQL会进行四舍五入的方式进行存储,如下所示:

但即便如此,四舍五入后的结构也不能超过范围,否组会被拦截。

decimal

当数据较大时,float类型可能就无法准确存储了,会存在精度方面的损失。这是可以用decimal来存储数据,语法如下:

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

使用与float类似,只不过float表示的精度大约是7位,decimal整数最大位数m为65,支持小数最大位数d是30,,如果d被省略,默认为0;如果m被省略,默认是10。如果希望小数精度高,使用decimal。

字符串类型

char

char的语法如下:

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

char为固定长度字符串,无论用多少都会分配L空间的大小。

varchar

varchar为变长字符串,语法如下:

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

这里的L为上限,用多少给多少,但是有1-3个字节用于记录数据大小,所有说有效字节数为65532。

当表的编码为utf8时,varchar(n)参数n的最大值是65532/3=21844(因为utf8中,一个字符占用3个字节),如果编码是gbk,varchar(n)参数n的最大值是65532/2=32766(因为gbk中,一个字符占用2字节)。同时,MYSQL对一行存储的数据大小也有要求,因此,实际存储的时候,若一行内还有其它列,这个存储的最大上限还要小一点。

日期和时间类型

常用的日期有如下几个:

date:日期'yyyy-mm-dd',占用三个字节

datetime:时间日期格式,'yyyy-mm-dd HH:ii:ss'表示范围从1000到9999,占用八字节

timestamp:时间戳,从1970年开始的yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四个字节,该字段可自动更新,但是要加上default current_timestamp字段。

enum和set类型

enum提供了若干个选项的值,但是在最终的单元格中,实际只存储了其中一个值,而且处于效率考虑,这些值实际存储的是"数字";set类型与enum类似,只不过在最终的单元格中可以存储其中任意多个值。如下所示:

enum即可以写对应的数据,也可以写对应的下标,这个下标从1开始;set集合也可以传入对应的数字,只不过会将数字转换成对应的二进制,从低位到高位分别对应的定义set的几个选项,若对应的二进制位为1则插入数据库中,如下所示:

若要在set类型中插入多个选项,可以用逗号分隔,如下所示:

enum类型可以根据数据来查,也可以根据下标来查;set类型查找时可以使用find_in_set函数,这个函数只能查一个元素是否在对应的集合中,如下所示:

若要在表中将含有某一数据的行筛选出来,也可使用该函数,如下所示:

相关推荐
qq_372154232 小时前
如何配置表中某列的排序权重_全文索引配置与权重分配
jvm·数据库·python
2501_914245932 小时前
CSS如何使用-nth-of-type精确选择列表项_通过元素类型限制提升样式健壮性
jvm·数据库·python
吕源林2 小时前
Golang如何做本地缓存加速_Golang本地缓存教程【核心】
jvm·数据库·python
阿维的博客日记2 小时前
where id NOT IN(?,?,?) 会走索引吗?
mysql·索引
Magic@2 小时前
Redis学习[1] ——基本概念和数据类型
linux·开发语言·数据库·c++·redis·学习
你觉得脆皮鸡好吃吗2 小时前
SQL注入 基础防御
数据库·sql
池佳齐2 小时前
软考高级系统架构设计师备考(十九):数据库系统—数据库设计
数据库·系统架构
_Evan_Yao2 小时前
缓存金字塔上的红色闪电:Redis 如何借力 CPU 的 L1/L2/L3 与 TLB 飞驰
java·数据库·redis·后端·缓存
Teable任意门互动2 小时前
多维表格哪家最好用最容易上手?国产开源 Teable 测评
开发语言·数据库·开源·excel·飞书·开源软件