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

MySQL(4)【数据类型 —— 数值类型】

阅读导航

  • 引言
  • 一、数据类型分类
  • 二、数值类型取值范围
  • 三、tinyint 类型
    • 1. 💻数值越界测试
      • ⭕有符号案例
      • ⭕无符号案例
  • 四、bit 类型
    • 1. 基本语法
    • 2. 使用示例
      • ✅创建表并插入数据
      • ✅使用 BIT 存储多个设置
      • ✅查询和格式化 BIT 数据
      • ✅更新 BIT 数据
  • 五、小数类型
    • 1. float
      • 🎯基本语法
      • 🎯使用示例
        • ⭕有符号案例
        • ⭕无符号案例
    • 2. decimal
      • 🎯基本语法
      • 🎯使用示例

引言

在上一篇文章里,我们学习了MySQL中如何操作表,比如怎么创建、修改和删除它们。但要想数据库真正发挥作用,还得了解怎么存储数据,这就涉及到了数据类型。数据类型决定了列里可以存什么类型的信息,比如数字、文字还是日期等。

本篇文章,我们就来聊聊MySQL中的数据类型,看看它们是怎么帮助我们把数据存得既准确又高效的。准备好,我们这就开始吧!

一、数据类型分类

分类数据类型说明
数值类型BIT(I)位类型。I指定位数,默认值1,范围1-64
数值类型TINYINT [UNSIGNED]带符号的范围-128到127,无符号范围0到255.默认有符号
数值类型BOOL使用0和1表示真和假
数值类型SMALLINT [UNSIGNED]带符号是-215到215-1,无符号是216-1
数值类型INT [UNSIGNED]带符号是-231到231-1,无符号是232-1
数值类型BIGINT [UNSIGNED]带符号是-263到263-1,无符号是264-1
数值类型FLOAT[(M,D)][UNSIGNED]指定显示长度,d指定小数位数,占用4字节
数值类型DOUBLE[(M, D)][UNSIGNED]表示比float精度更大的小数,占用空间8字节
数值类型DECIMAL (M,D)[UNSIGNED]定点数指定长度,D表示小数点的位数
文本、二进制类型CHAR(size)固定长度字符串,最大255
文本、二进制类型VARCHAR(SIZE)可变长度字符串,最大长度65535
文本、二进制类型BLOB二进制数据
文本、二进制类型TEXT大文本,不支持全文索引,不支持默认值
时间日期日期类型DATE(yyy-mm-dd)/DATETIME(yyyy-mm-dd hh:mm:ss)/TIMESTAMP时间戳
ENUM类型ENUMENUM是一个字符串对象,其值来自表创建时在列规定中显,示枚举的一列值
SET类型SETSET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个set成员的set,列值时各成员之间用逗号间隔开。这样set成员值本身不能包含逗号。

二、数值类型取值范围

类型字节最小值(带符号的)最大值(带符号的)最大值(无符号的)
TINYINT1-128127255
SMALLINT2-327683276765535
MEDIUMINT3-8388608838860716777215
INT4-214748364821474836474294967295
BIGINT8-9223372036854775808922337203685477580718446744073709551615

三、tinyint 类型

1. 💻数值越界测试

⭕有符号案例

首先,我们创建了一个名为t1的表,该表包含一个名为num的列,其数据类型为TINYINT

mysql> create table t1(num tinyint);
Query OK, 0 rows affected (0.02 sec)

接下来,向t1表中插入了一个值1

mysql> insert into t1 values(1);
Query OK, 1 row affected (0.00 sec)

然后,尝试向t1表中插入一个值128。但是,128超出了TINYINT(有符号)的有效值域,因此MySQL抛出了一个错误。

mysql> insert into t1 values(128); -- 越界插入,报错
ERROR 1264 (22003): Out of range value for column 'num' at row 1

通过SELECT查询来查看t1表中的所有数据。由于只有第一个INSERT操作成功,所以查询结果将只包含第一个插入的值1

mysql> select * from t1;
+-----+
| num |
+-----+
|   1 |
+-----+

🚨🚨注意在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的,可以通过UNSIGNED来说明某个字段是无符号的

⭕无符号案例

mysql> create table t2(num tinyint unsigned);mysql> insert into t2 values(-1); -- 无符号,范围是: 0 - 255
ERROR 1264 (22003): Out of range value for column 'num' at row 1mysql> insert into t2 values(255);
Query OK, 1 row affected (0.02 sec)mysql> select * from t2;
+------+
| num |
+------+
| 255 |
+------+
1 row in set (0.00 sec)

四、bit 类型

1. 基本语法

bit[(M)] : 位字段类型。M表示每个值的位数,范围从164。如果M被忽略,默认为1

2. 使用示例

BIT[(M)] 类型在 MySQL 中用于存储二进制数据,其中 M 表示位字段的长度,范围从 1 到 64。如果省略 M,则默认为 1。

✅创建表并插入数据

假设我们有一个表,用于存储用户的ID和他们的某些二进制设置(例如,是否启用了某个功能)。

create table user_settings (user_id INT AUTO_INCREMENT PRIMARY KEY,feature_enabled BIT(1) NOT NULL DEFAULT b'0'
);-- 插入数据
INSERT INTO user_settings (feature_enabled) VALUES (b'1'); -- 启用功能
INSERT INTO user_settings (feature_enabled) VALUES (b'0'); -- 禁用功能

在这个例子中,feature_enabled 列是一个 BIT(1) 类型的字段,用于存储单个位的值(0 或 1),表示功能是否启用。

✅使用 BIT 存储多个设置

如果你需要存储多个二进制设置,可以使用更大的 BIT 字段。

create table user_profiles (user_id INT AUTO_INCREMENT PRIMARY KEY,settings BIT(8) NOT NULL DEFAULT b'00000000'
);-- 假设 settings 的每一位代表一个不同的设置
-- 例如,第1位是邮件通知,第2位是短信通知,依此类推
INSERT INTO user_profiles (settings) VALUES (b'10101010');

✅查询和格式化 BIT 数据

当你从 BIT 类型的列中检索数据时,你可能想要以更易于理解的方式查看这些数据。

-- 查询并格式化 BIT 数据
SELECT user_id, BIN(settings) AS binary_settings FROM user_profiles;-- 如果你只对某些位感兴趣,可以使用位运算
-- 例如,检查邮件通知是否启用(假设它是第1位)
SELECT user_id, (settings & b'00000001') AS mail_notifications FROM user_profiles;

✅更新 BIT 数据

你可以使用位运算符来更新 BIT 字段中的值。

-- 假设我们要启用用户ID为1的用户的邮件通知(第1位)
UPDATE user_profiles
SET settings = settings | b'00000001'
WHERE user_id = 1;-- 禁用短信通知(假设它是第2位)
UPDATE user_profiles
SET settings = settings & ~b'00000010'
WHERE user_id = 1;

五、小数类型

1. float

🎯基本语法

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

🎯使用示例

⭕有符号案例

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入

mysql> create table t6(id int, salary float(4,2));
Query OK, 0 rows affected (0.01 sec)mysql> insert into t6 values(100, -99.99);
Query OK, 1 row affected (0.00 sec)mysql> insert into t6 values(101, -99.991); #多的这一点被拿掉了
Query OK, 1 row affected (0.00 sec)mysql> select * from t6;
+------+--------+
| id | salary |
+------+--------+
| 100 | -99.99 |
| 101 | -99.99 |
+------+--------+
2 rows in set (0.00 sec)
⭕无符号案例

如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99

mysql> create table t7(id int, salary float(4,2) unsigned);
Query OK, 0 rows affected (0.01 sec)mysql> insert into t7 values(100, -0.1);
Query OK, 1 row affected, 1 warning (0.00 sec)mysql> show warnings;
+---------+------+-------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------+
| Warning | 1264 | Out of range value for column 'salary' at row 1 |
+---------+------+-------------------------------------------------+
1 row in set (0.00 sec)mysql> insert into t7 values(100, -0);
Query OK, 1 row affected (0.00 sec)mysql> insert into t7 values(100, 99.99);
Query OK, 1 row affected (0.00 sec)

2. decimal

🎯基本语法

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
  • decimal(5,2) 表示的范围是 -999.99 ~ 999.99
  • decimal(5,2) unsigned 表示的范围 0 ~ 999.99
  • decimalfloat很像,但是有区别:floatdecimal表示的精度不一样

🎯使用示例

mysql> create table t8 ( id int, salary float(10,8), salary2
decimal(10,8));mysql> insert into t8 values(100,23.12345612, 23.12345612);
Query OK, 1 row affected (0.00 sec)mysql> select * from t8;
+------+-------------+-------------+
| id | salary | salary2 |
+------+-------------+-------------+
| 100 | 23.12345695 | 23.12345612 | # 发现decimal的精度更准确,因此如果我们希望某个数据表示高精度,选择decimal
+------+-------------+-------------+

📌经过上面的例子可以发现decimal的精度更准确,因此如果我们希望某个数据表示高精度就选择decimal

相关文章:

MySQL(4)【数据类型 —— 数值类型】

阅读导航 引言一、数据类型分类二、数值类型取值范围三、tinyint 类型1. 💻数值越界测试⭕有符号案例⭕无符号案例 四、bit 类型1. 基本语法2. 使用示例✅创建表并插入数据✅使用 BIT 存储多个设置✅查询和格式化 BIT 数据✅更新 BIT 数据 五、小数类型1. float&…...

Golang超详细入门教程

Golang超详细入门教程 部分图片可能加载不出来,所以这里我上传到了自己的个人网站上也可以查看:http://dahua.bloggo.chat/testimonials/490.html 一、数据类型转换 C语言中数据可以隐式转换或显示转换, 但是Go语言中数据只能显示转换格式: 数据类型(…...

鸿蒙NEXT自定义组件:太极Loading

【引言】(完整代码在最后面) 本文将介绍如何在鸿蒙NEXT中创建一个自定义的“太极Loading”组件,为你的应用增添独特的视觉效果。 【环境准备】 电脑系统:windows 10 开发工具:DevEco Studio NEXT Beta1 Build Vers…...

FPGA 第7讲 简单组合逻辑译码器

时间:2024.11.15 一、学习内容 1.译码器 译码是编码的逆过程,在编码时,每一种二进制代码,都赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义翻译出来的过程叫做译码,实现译码操…...

opencv kdtree pcl kdtree 效率对比

由于项目中以一个环节需要使用kdtree ,对性能要求比较严苛&#xff0c;所以看看那个kdtree效率高一些。对比了opencv和pcl。 #include <array> #include <deque> #include <fstream> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp…...

1+X应急响应(网络)系统备份:

系统备份&#xff1a; 系统备份概述&#xff1a; 备份种类&#xff1a; 灾难恢复等级划分&#xff1a; 执行一次备份&#xff1a; 创建备份计划&#xff1a; 恢复备份&#xff1a;...

python os.path.dirname(path) 详解

dirname 是一个用于处理文件路径的 Python 函数&#xff0c;通常用于获取给定路径的目录部分。它是 os.path 模块中的一部分。下面是对 dirname 函数的详细解释和使用示例。 1、导入模块 首先&#xff0c;你需要导入 os 模块&#xff0c;因为 dirname 是 os.path 模块的一部分…...

深度解析 Feign

一、引言 在当今微服务架构盛行的时代&#xff0c;众多微服务相互协作构成了复杂的分布式系统。然而&#xff0c;各个微服务之间的调用往往涉及到诸多繁琐的细节&#xff0c;比如网络请求的构建、参数的处理、响应的解析等。为了让开发人员能够更加专注于业务逻辑的实现&#x…...

AI工业大模型报告:体系架构、关键技术与典型应用

研究意义 随着新一代人工智能的发展, 大模型&#xff08;如 GPT-4o 等&#xff09;凭借大规模训练数据、网络参数和算 力涌现出强大的生成能力、泛化能力和自然交互能力, 展现出改变工业世界的巨大潜力. 尽管大模型 已在自然语言等多个领域取得突破性进展, 但其在工业应用中的…...

深入理解接口测试:实用指南与最佳实践5.0(五)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…...

常用List工具类(取交集、并集等等)

支持操作&#xff1a; 根据指定字段&#xff0c;获取两个对象集合的交集、补集、并集等将对象中的多个字段值&#xff0c;抽取到一个List中 import java.lang.reflect.Field; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function…...

4 C++ 复合类型:引用和指针

复合类型是指基于其它类型定义的类型。C 有几种复合类型&#xff0c;包括引用、指针。 1 引用 引用&#xff08;reference&#xff09;为对象起了另外一个名字&#xff0c;引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型&#xff0c;其中d是声明的变量…...

ABAP关于PS模块CJ20N中项目物料的屏幕和字段增强CI_RSADD

网上搜关于CJ20N的屏幕增强,基本都是关于项目定义(CI_PROJ)、项目WBS(CI_PRPS)、项目网络活动工序(CI_AFVU)的字段与屏幕增强,几乎没有关于项目物料(CI_RSADD)的字段屏幕增强,我在这里做一个分享。 主要逻辑:实现badi增强,并自建一个函数组后创建屏幕,在badi里面调用…...

探索IDE的无限可能:使用技巧与插件推荐

在软件开发的世界里&#xff0c;集成开发环境&#xff08;IDE&#xff09;是开发者的得力助手&#xff0c;它不仅提供了代码编辑、编译、调试等功能&#xff0c;还通过各种插件扩展了其功能&#xff0c;使得开发工作更加高效和便捷。本文将带你探索IDE的使用技巧和一些实用的插…...

自动化生成测试用例:利用OpenAI提升电商网站测试覆盖率

导语 自动化生成测试用例是软件测试领域一个强大的应用&#xff0c;通过OpenAI的语言模型&#xff0c;测试工程师可以快速生成高质量的测试用例&#xff0c;尤其是在处理边界条件和极端情况时&#xff0c;提升测试覆盖率。本篇文章将结合一个典型的电商网站案例&#xff0c;介绍…...

时间序列关于可解释性值得关注的论文汇总-第2篇

前言 这是时序可解释性论文汇总的第二篇&#xff0c;第一篇见这里&#xff08;后台回复&#xff1a;“论文合集”可直接获取整理的文章&#xff09;。深度学习的可解释性研究一直是热门&#xff0c;而时间序列的可解释性同样非常重要。这是因为时序模型被大量应用到特定领域&a…...

Vulnhub:DC-4靶机渗透——土豆片的靶机渗透练习

攻击机&#xff1a;kali 靶机&#xff1a;DC-4 一&#xff0c;信息收集 1.主机发现 找寻同网段下存活的主机 arp-scan -l2.端口扫描 查看此主机上有哪些开放端口 nmap -sV -p- 192.168.126.136发现22&#xff0c;80端口&#xff0c;远程连接跟网站&#xff08;大概&…...

【云原生系列--Longhorn的部署】

Longhorn部署手册 1.部署longhorn longhorn架构图&#xff1a; 1.1部署环境要求 kubernetes版本要大于v1.21 每个节点都必须装open-iscsi &#xff0c;Longhorn依赖于 iscsiadm主机为 Kubernetes 提供持久卷。 apt-get install -y open-iscsiRWX 支持要求每个节点都安装 N…...

Java集合(Collection+Map)

Java集合&#xff08;CollectionMap&#xff09; 为什么要使用集合&#xff1f;泛型 <>集合框架单列集合CollectionCollection遍历方式List&#xff1a;有序、可重复、有索引ArrayListLinkedListVector&#xff08;已经淘汰&#xff0c;不会再用&#xff09; Set&#xf…...

微信小程序02-页面制作

微信小程序页面制作指南 目录 微信小程序页面制作 1. 个人信息展示小程序 案例分析 需求背景&#xff1a;许多大学生毕业后需要求职&#xff0c;因此制作一个展示个人信息的微信小程序对招聘人员快速了解求职者非常有帮助。页面布局&#xff1a;页面分为头像区域和详细信息…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...