当前位置: 首页 > news >正文

MySQL -- 数据类型

1、数据库的基础数据类型

  • TINYINT
  • INT
  • BIGINT
  • FLOAT
  • DECIMAL
  • CHAR
  • VARCHAR
  • TEXT
  • BLOB
  • DATE
  • DATETIME
  • TIMESTAMP
  • SET
  • ENUM

2、不同数据类型区别以及作用

1、数值类型

1.1 整数类型

1.1.1 TINYINT

这里我们以TINYINT这个类型为例,解释一下在mysql中整数类型的一些存储规则

首先我们需要知道的是,数据库可以存储各种各样的数据,为了更好地管理数据,就区分出了不同地数据类型,而TINYINT 就是一种数据类型,它的存储大小范围:有符号(-128 ~ 127),无符号(0 ~ 255)

主要用于存储一些小范围的整数,通常是一些状态码。在数据库中创建表存储数据时,同时需要注意不要超过其存储范围,不然就会出现如下情况

在这里插入图片描述
在我们创建表时,定义表中元素类型时,例如:TINYINT(3)。3就是表示通常是表示一个显示长度,不过在整数类型中一般可以不作设置,毕竟数字比较小。

1.1.2 BIGINT and INT
这两个数据类型本质上和TINYINT没有什么区别,只是在存储的数据大小上有差异。INT的取值范围为:有符号(-2^31 ~ 2^31-1),无符号(0 ~ 2^32-1)。BIGINT的取值范围为:有符号(-2^63 ~ 2^63-1),无符号(0 ~ 2^64-1)。通常情况下,我们一般使用INT作为存储数据类型。如果需要设定无符号数,我们只需要在创建表的时候,在对应变量的后面加上unsigned 即可。

1.2 浮点类型

1.2.1 FLOAT

float对象在创建的时候,通常需要设定总的位数和精度,也就是float(M,D)。D一般表示小数点后的位数,M一般表示整个数的位数。

在float类型被创建时,一般需要给出精度,否则就按默认精度设定,一般在小数点后六七位左右。而如果我们设定了精度,却多给了几位小数点,那么在存储的时候,数据库会自动四舍五入,例如:float(4,2),然后我要存储的数据是99.345,存储结果就是99.35。如果小数点后的位数过多,数据库则不会让你进行存储。同时,如果进位后的数字超过了规定位数,数据库也不会允许你存储。就比如,float(4,2)-> 99.995,进位后变成100.00,虽然小数点后的精度满足了要求,但是总的位数不满足,这也是不行的。 另外,需要注意的是,这种类型的数据精度并不算高,所以在一些需要高精度的数据时不推荐这种类型的数据进行存储。

1.2.2 DECIMAL

这种数据类型的存储效率比较低,但是存储精度很高,弥补了FLOAT这种数据类型在精度上的不足。其设定精度和范围的方式和FLOAT是一样的,其余用法与功能与FLOAT基本雷同

2、字符类型

2.1 定长与变长字符串类型

2.1.1 CHAR

数据库中的char类型与我们平常敲代码所遇见的char类型有点不同,当我们存储char类型的数据时,我们需要设定规定的字符长度。注意,这里的字符长度和字节还是有很大的区别的,在不同数据库的校验集下,一个字符代表的字节数可能是不同的,例如: 在数据库中(utf8的编码集),我们存储一个汉字所用的字节数为3,在其他的编码集中,会有些许不同。当我们设定存储的数据类型为char (2)此时无论我们存储什么都会被当成一个符号,如果长度超过2,数据会被截断,不足2,在存储时,会自动补成空格,固定占用两个字符所需空间,适用于短字符串的存储。

2.1.2 VARCHAR

varchar和char有一些明显的差异,一个是char为定长字符,无论你是否存储那么多的值,它都会占据这么多空间。而varchar则不同,举个例子: varchar(4),这里表示数据库系统能给你的存储的空间有4个字符,其中如果你只存储了一个或两个字符,那数据库实际存储空间就是一两个字符

为了记录实际存储个数,varchar实际上会专门留1~3字节存储需要存储的字符个数,其中varchar存储的数据上限就是65535个字节,其中实际存储有效数据的字节会比65535少1 ~ 3个字节,用于存储实际存储数据。这种存储方式实际上节省了数据库的存储空间,同时我们也应避免设置过大的存储数据

2.2 文本与大对象(简单介绍)

2.2.1 TEXT

子类型:TINYTEXT(255B)、TEXT(64KB)、MEDIUMTEXT(16MB)、LONGTEXT(4GB)主要用于存储一些大文本数据,比如文章、日志

2.2.2 BLOB

子类型:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。主要用于存储二进制数据(如图片、文件)。

3、日期与时间类型

3.1日期与时间类型

3.1.1 DATE

格式:YYYY-MM-DD , 主要用于存储日期,在存储时,需要加入单引号

3.1.1 DATETIME

格式:YYYY-MM-DD HH:MM:SS,范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,用途:记录精确时间(如订单创建时间)。

3.1.1 TIMESTAMP

格式:YYYY-MM-DD HH:MM:SS,范围:1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC。该类型的数据,会自动记录修改时间,也就是变成最近的修改时间

4、枚举与集合类型

4.1 ENUM

数据库中的ENUM类型与我们在C语言中遇见的enum类型有许多的相似之处。首先,在数据库中存储时,我们也可以创建许多的变量字段,例如:ENUM('value1', 'value2', ...)。 后续我们插入的时候,就必须插入改ENUM类型中包含的值而且只能插一个,否则会报错。我们存储的时候也可以用数字来代替enum中的value值,就比如,我们可以使用1, 来代表values 1 , 2 代表values 2 ,依次替代。这是因为底层存储时,数据库系统就是使用数据库对这些数据进行存储(从1开始)。如果后续要新增枚举值,要修改表的结构。

4.2 SET

格式:SET('value1', 'value2', ...),主要用途:允许字段取多个预定义值(如用户权限 SET('read', 'write', 'delete'))。当我们需要存储多个值时,这些值都必须保证是创建表时,预定义了的值,如果需要新增,必须要修改表值。在实际存储过程,系统采用的是位掩码的存储方式。也就是说,我们存储数据时,也可以采用数字的方式来进行输入。例如: set ('values 1' ,'values 2' ,'values 3' )。假设我们需要存储values 1 和 values 3 , 那么对应的掩码就是1 0 1, 也就是5, 此时我们输入5 ,效果也和输入values 1 和 values 3是一样的

相关文章:

  • Java 枚举
  • SpringBoot自动装配的工作原理
  • python-docx - 读写更新 .docx 文件(Microsoft Word 2007+ )
  • Django系列教程(7)——路由配置URLConf
  • SpringBoot 入门基础
  • OBS推WebRTC流,并添加毫秒级时间显示
  • 【C++11】auto decltype nullptr
  • C++ 函数重载
  • 【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制
  • BUUCTF逆向刷题笔记(13-?)持续更新
  • 【leetcode hot 100 24】两两交换链表中的节点
  • vulnhub-DC-9 SQL注入、“ssh端口敲门”、hydra爆破
  • 题解:AT_arc093_b [ABC092D] Grid Components
  • Python规则引擎DIY:从零开始构建规则引擎
  • Linux》》Ubuntu22.04下Docker的安装 Docker
  • 【VS】vs生成前事件,复制脚本文件至运行目录
  • Python Numpy面试题及参考答案 草
  • Prompt 工程
  • MySQL中IN关键字与EXIST关键字的比较
  • JAVA:利用 Jsoup 轻松解析和操作 HTML 的技术指南
  • 四川落马厅官周海琦受审,1000余人接受警示教育
  • 银川市长信箱被指“已读乱回”,官方通报:对相关责任人问责处理
  • 申花四连胜领跑中超,下轮榜首大战对蓉城将是硬仗考验
  • 人民日报:光荣属于每一个挺膺担当的奋斗者
  • 博物馆有一项活动40岁以上不能参加?馆方回应
  • 李家超称香港将部署为内地企业提供供应链服务,突破美国封锁