当前位置: 首页 > 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;页面分为头像区域和详细信息…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...