【MySQL】常见的数据类型

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:MySQL

在这里插入图片描述


目录

  • 👉🏻常见的数据类型
    • bit类型
    • enum
    • set
      • 集合查询函数find_ in_ set
  • 👉🏻浮点类型
    • float类型
    • decimal
  • 👉🏻字符串类型
    • char
    • varchar
  • 👉🏻日期和时间类型

👉🏻常见的数据类型

MySQL 中常见的数据类型包括:

  1. 整数类型:
    • TINYINT:范围为 -128 到 127 (有符号)或 0 到 255 (无符号)的小整数,占1字节。
    • SMALLINT:范围为 -32768 到 32767 (有符号)或 0 到 65535 (无符号)的较小整数,占2字节。
    • MEDIUMINT:范围为 -8388608 到 8388607 (有符号)或 0 到 16777215 (无符号)的中等大小整数,占3字节。
    • INT:范围为 -2147483648 到 2147483647 (有符号)或 0 到 4294967295 (无符号)的标准整数。
    • BIGINT:范围为 -9223372036854775808 到 9223372036854775807 (有符号)或 0 到 18446744073709551615 (无符号)的大整数。占8字节

尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。

  1. 浮点数类型:

    • FLOAT:单精度浮点数,精确到小数点后 7 位,占用空间4个字节。
    • DOUBLE:双精度浮点数,精确到小数点后 15 位。
    • DECIMAL:用于存储精确小数的数据类型,需要指定精度和小数位数。
  2. 字符串类型:

    • CHAR:固定长度的字符串,最多可以存储 255 个字符。
    • VARCHAR:可变长度的字符串,最多可以存储 65535 个字符。
    • TEXT:用于存储大文本数据的类型,最多可以存储 65535 个字符。
    • BLOB:用于存储二进制大对象的类型,最多可以存储 65535 个字节。
  3. 日期与时间类型:

    • DATE:用于存储日期,格式为 ‘YYYY-MM-DD’。
    • TIME:用于存储时间,格式为 ‘HH:MM:SS’。
    • DATETIME:用于存储日期和时间,格式为 ‘YYYY-MM-DD HH:MM:SS’。
    • TIMESTAMP:用于存储时间戳,格式为 ‘YYYY-MM-DD HH:MM:SS’,自动记录数据修改时间。
  4. 其他常见类型:

    • ENUM:用于存储枚举值,可从预定义的值列表中选择。
    • SET:用于存储一个或多个值的集合,可从预定义的值列表中选择。

这些是 MySQL 中常见的数据类型,根据不同的需求和情况选择合适的数据类型能够更好地优化数据库的性能和存储效率。

在mysql 中若插入不合法的数据,mysql一般都直接拦截我们,不让我们做对应的操作

怎么声明无符号? 🤔
在 MySQL 中,你可以通过在数据类型后面添加 UNSIGNED 关键字来声明一个无符号数。这样的数据类型将只能存储非负值。

例如,如果你想要声明一个无符号的整数列,你可以这样做:

column_name INT UNSIGNED

这将创建一个无符号整数列,只能存储大于等于零的整数值。

bit类型

在 MySQL 中,BIT 类型用于存储位字段值,即一系列位的集合。BIT 类型可以存储多个位,最多可存储 64 个位。这个类型通常用于存储布尔值、标志或其他只有两种可能状态的信息。

以下是声明 BIT 类型的一般语法:

column_name BIT(length)
  • column_name 是列的名称。
  • length 是位字段的长度,可以是 1 到 64 之间的整数。如果未指定长度,默认为 1(如果插入>1的整数则会报错,比如2的二进制表示是10)。

例如,要声明一个 BIT 类型的列,可以这样做:

flag BIT

这将创建一个只能存储单个位的 BIT 列。

要注意的是,BIT 类型的长度是以位(bit)为单位的,而不是以字节(byte)为单位的。因此,在使用 BIT 类型时,需要根据需要合理地选择长度。

需要注意,bit字段在显示时,是按照ASCII码对应的值显示。如果我们想看到其以10进制方式显示,可以这样
在这里插入图片描述

enum

在 SQL 中,ENUM(枚举)类型用于定义列可以具有的可能值的有限列表。它允许你在列中指定一组可能的值,并且只允许列中的值为这些指定的值之一

使用 ENUM 类型可以确保列只包含预定义的值,从而提供数据的一致性和可控性。这在某些情况下非常有用,例如性别、状态、类型等具有固定值集合的情况。

下面是一个使用 ENUM 类型的示例:

CREATE TABLE students (student_id INT,first_name VARCHAR(50),last_name VARCHAR(50),gender ENUM('Male', 'Female')
);

在这个示例中,gender 列被定义为 ENUM 类型,并且只允许取 'Male''Female' 两个值之一。如果尝试插入其他值,将会引发错误。

使用 ENUM 类型的优点包括数据的一致性和可读性。它可以确保列中的值只能是预先定义的选项之一,避免了数据不一致或无效值的问题。另外,ENUM 类型的值在某些情况下也可以作为代码中的枚举类型使用,增强了可读性和可维护性。

但是,ENUM 类型也有一些缺点。例如,当需要频繁更改枚举值或枚举值过多时,维护起来可能会比较繁琐。此外,不同的数据库对 ENUM 类型的实现可能略有不同,因此在跨数据库使用时需要注意兼容性问题。

总的来说,ENUM 类型提供了一种简单而有效的方式来限制列中的值,并确保数据的一致性和可控性。

set

在 SQL 中,SET 类型是一种用于表示一组可能值的数据类型,类似于 ENUM 类型。然而,与 ENUM 类型不同的是,SET 类型允许列中的值是预定义的多个选项之一,而不仅限于单个选项。

SET 类型通常用于表示多选项的属性,例如用户的兴趣爱好、文章的标签等。每个 SET 类型的列可以包含零个或多个预定义的选项,这些选项在定义列时被指定。

以下是一个使用 SET 类型的示例:

CREATE TABLE articles (article_id INT,title VARCHAR(100),content TEXT,tags SET('Technology', 'Science', 'Business', 'Sports')
);

在这个示例中,tags 列被定义为 SET 类型,并且可以包含 'Technology''Science''Business''Sports' 中的一个或多个选项。

与 ENUM 类型类似,SET 类型也可以确保列中的值只能是预定义的选项之一,从而提供数据的一致性和可控性。但与 ENUM 类型不同的是,SET 类型允许列中包含多个选项,而不仅限于单个选项。

但是,与 ENUM 类型类似,使用 SET 类型也可能会面临一些缺点,例如需要频繁更改选项或选项过多时的维护问题,以及不同数据库之间的兼容性问题。

总的来说,SET 类型提供了一种方便的方式来表示多选项的属性,并确保数据的一致性和可控性。

集合查询函数find_ in_ set

FIND_IN_SET 函数是 MySQL 中用于在逗号分隔的字符串中查找指定子字符串的函数。它的语法如下:

FIND_IN_SET(search_string, string_list)

其中:

  • search_string 是要查找的子字符串。
  • string_list 是一个以逗号分隔的字符串列表。

FIND_IN_SET 函数返回 search_stringstring_list 中的位置。如果找到了,则返回其在列表中的位置(从 1 开始),如果未找到,则返回 0。

以下是一个示例:

SELECT FIND_IN_SET('apple', 'apple,banana,orange,mango');

在这个示例中,FIND_IN_SET 函数将在逗号分隔的字符串 'apple,banana,orange,mango' 中查找子字符串 'apple',并返回它在列表中的位置,结果是 1

FIND_IN_SET 函数通常用于查询具有类似标签或类别的数据,其中数据存储为逗号分隔的字符串列表。例如,在一个带有标签的文章表中,可以使用该函数来查找包含特定标签的文章。

需要注意的是,虽然 FIND_IN_SET 函数在某些情况下很方便,但在大型数据集上可能会影响性能。如果可能的话,最好将数据存储为关联表而不是逗号分隔的字符串列表。

它在查表中的使用可以这样。
查询爱好登山的人:

mysql> select * from votes where find_in_set('登山', hobby);
+----------+---------------+--------+
| username | hobby | gender |
+----------+---------------+--------+
| 雷锋 | 登山,武术 ||
| Juse | 登山,武术 ||
| LiLei | 登山 ||
+----------+---------------+--------+

👉🏻浮点类型

float类型

Float 是一种用于存储浮点数的数据类型,在大多数数据库管理系统中都有支持。浮点数是一种带有小数点的数值,可以表示大范围的数值,包括小数和指数。

在 SQL 中,FLOAT 数据类型用于存储浮点数值。它通常具有固定的精度,表示小数点前后的位数。在创建表时,可以指定 FLOAT 列的精度,即小数点后的位数。

下面是一个在创建表时使用 FLOAT 类型的示例:

CREATE TABLE products (product_id INT,product_name VARCHAR(50),price FLOAT(8,2)
);

在这个示例中,price 列被定义为 FLOAT(8,2),意味着它可以存储最多 8 位数字,其中包括 2 位小数

需要注意的是,由于浮点数的特性,它可能会导致精度问题。在进行精确计算时,特别是涉及货币等敏感数据时,可能会遇到舍入误差。对于这些情况,通常建议使用 DECIMAL NUMERIC 类型,因为它们提供了精确的十进制数值存储。

总之,FLOAT 类型用于存储浮点数值,在创建表时可以指定精度,但需要注意可能出现的精度问题。

decimal

Decimal 是一种用于存储精确数值的数据类型,在 SQL 中被广泛使用。与 Float 不同,Decimal 适用于需要精确表示的数字,如货币金额或其他需要确切值的情况。

在 SQL 中,DECIMAL 或 NUMERIC 数据类型用于表示固定精度和小数位数的数值。与 Float 不同,Decimal 不会产生舍入误差,因为它存储的是确切的数值。

下面是一个在创建表时使用 Decimal 类型的示例:

CREATE TABLE products (product_id INT,product_name VARCHAR(50),price DECIMAL(10,2)
);

在这个示例中,price 列被定义为 DECIMAL(10,2),意味着它可以存储最多 10 位数字,其中包括 2 位小数

相比之下,Float 类型存储的是近似值,而 Decimal 类型存储的是精确值。Float 类型对于存储需要大范围数字的情况可能更加适用,但在需要精确表示的情况下,如金融数据或计算精度要求较高的情况下,Decimal 类型更可靠。

在使用这两种类型时,需要考虑到数据的性质和应用场景,以选择最适合的类型来存储数据。

👉🏻字符串类型

char

语法;

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

Char 是一种用于存储固定长度字符串的数据类型,在 SQL 中被广泛使用。Char 类型在创建表时指定一个固定长度,存储的字符串会被自动填充到指定长度,不足部分会使用空格填充

在 SQL 中,CHAR 数据类型用于表示固定长度的字符串。当你知道数据的长度是固定的或者有一个最大长度限制时,Char 类型是很有用的,因为它可以提供更好的性能和存储效率。

下面是一个在创建表时使用 Char 类型的示例:

CREATE TABLE employees (employee_id INT,first_name CHAR(50),last_name CHAR(50)
);

在这个示例中,first_namelast_name 列被定义为 CHAR(50),意味着它们可以存储最多 50 个字符的字符串。如果存储的实际字符串长度不足 50 个字符,Char 类型会自动用空格填充到指定长度。

需要注意的是,由于 Char 类型存储的是固定长度的字符串,因此它可能会占用比实际字符串长度更多的存储空间。这意味着如果存储的字符串长度不够指定的长度,可能会浪费一些存储空间。

总之,Char 类型适用于存储固定长度的字符串,在创建表时需要指定固定的长度,对于知道数据长度固定或有最大长度限制的情况下非常实用。

varchar

VARCHAR 是一种用于存储可变长度字符串的数据类型,在 SQL 中被广泛使用。与 CHAR 类型不同,VARCHAR 类型可以存储可变长度的字符串,只占用实际字符串长度所需的存储空间,因此更加灵活和节省空间。

在 SQL 中,VARCHAR 数据类型用于表示可变长度的字符串。在创建表时,你需要指定一个最大长度,但存储的实际字符串长度可以在该最大长度内变化。

下面是一个在创建表时使用 VARCHAR 类型的示例:

CREATE TABLE customers (customer_id INT,first_name VARCHAR(50),last_name VARCHAR(50)
);

在这个示例中,first_namelast_name 列被定义为 VARCHAR(50),意味着它们可以存储最多 50 个字符的可变长度字符串。

VARCHAR 类型的优点包括节省存储空间和更灵活地处理字符串长度变化。由于它只存储实际字符串长度所需的空间,因此在存储长度不确定或变化的数据时更为适用。

需要注意的是,虽然 VARCHAR 类型在存储空间上更为高效,但在某些操作(如索引和比较)可能会稍慢于 CHAR 类型,因为它需要额外的长度信息来存储字符串(即有1 - 3 个字节用于记录数据大小)。因此,在选择使用 VARCHAR 还是 CHAR 类型时,需要根据具体情况权衡存储效率和操作性能。

🍓关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。

  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],
  • 如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

👉🏻日期和时间类型

常用的日期有如下三个:

  • date :日期 ‘yyyy-mm-dd’ ,占用三字节
  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节
  • timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节(当对表进行插入或修改时,时间戳会自动更新)

下面是使用案例:

mysql> create table birthday (t1 date, t2 datetime, t3 timestamp);
Query OK, 0 rows affected (0.01 sec)
//插入数据:
mysql> insert into birthday(t1,t2) values('1997-7-1','2008-8-8 12:1:1'); --插入两
种时间
Query OK, 1 row affected (0.00 sec)
mysql> select * from birthday;
+------------+---------------------+---------------------+
| t1 | t2 | t3 |
+------------+---------------------+---------------------+
| 1997-07-01 | 2008-08-08 12:01:01 | 2017-11-12 18:28:55 | --添加数据时,时间戳自动补
上当前时间
+------------+---------------------+---------------------+
//更新数据:
mysql> update birthday set t1='2000-1-1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from birthday;
+------------+---------------------+---------------------+
| t1 | t2 | t3 |
+------------+---------------------+---------------------+
| 2000-01-01 | 2008-08-08 12:01:01 | 2017-11-12 18:32:09 | -- 更新数据,时间戳会更新
成当前时间
+------------+---------------------+---------------------+

如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansys Zemax|HUD 设计实例

说明 本文介绍了HUD设计实例。 实例说明 规格如下: 显示器尺寸:24*8mm 眼盒尺寸:100*40mm 放大倍率:5 (虚像尺寸 120*40mm) 虚像距离:1.8m 最终光学系统的整体布局如下图所示。 从HUD发出的…

官宣!招商工作全面启动“2024南京智博会”众多企业踊跃报名

2024南京智博会,作为一场盛大的科技盛宴,经过多年的发展与沉淀,已经成功跻身国内顶尖的高新技术产品及解决方案的展示平台之列,成为了引领行业趋势的风向标。本届智博会不仅汇聚了众多知名科技企业,更展现了国内外最前…

中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询

目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码(一)编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是&#xff0…

kafka创建topic并且查看topic情况

创建topic find / -name kafka-topics.sh/opt/kafka_2.13-2.8.1/bin./kafka-topics.sh --bootstrap-server localhost:9092 --topic hello --create查询某个topic的情况 kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic hello

哪个品牌led灯好?五大好用护眼台灯推荐

哪个品牌led灯好?目前LED护眼台灯当中做得比较好的有明基、松下、书客等品牌。在如今LED灯市场的海洋中,选择一款可靠的护眼台灯变得愈发重要。然而,众多品牌和产品的涌现也让消费者面临着选择困难。为了帮助大家找到最合适的LED台灯&#xf…

在SQL Server中使用临时表与普通表的性能差异分析

在SQL Server中,临时表和普通表的性能确实存在差异,具体表现和影响因素如下: 临时表和普通表的区别 存储位置: 临时表:存储在tempdb数据库中,生命周期仅限于当前会话或批处理。当会话结束或批处理完成时&a…

Chromium 调试指南2024 Windows11篇-使用日志来辅助调试(八)

1. 日志:你的第一个调试工具 日志是开发者最简单也是最常用的调试工具之一,它能够提供程序运行时的详细记录。通过合理的日志记录策略,开发者可以快速定位问题发生的上下文,理解程序的运行流程和状态。 2. 如何在Chromium中使用…

百度云防护自定义访问策略URI使用说明

百度云防护的创建防御模板里的自定义访问策略功能是一个不错自定义拦截功能。 其中URI拦截策略是一种非常不错的拦截手段,今天我们来说明下如何使用URI。 首先什么是URI?关于什么是URI百度上写了很多,不过对于小白来说,是非常难…

中国平安发布“绿美广东·平安古树守护行动” 为广东古树名木提供超2600万风险保障

为响应国家关于生态文明建设的号召,发展绿色金融,助力构建“绿美广东”生态建设新格局,5月11日,中国平安在广东省韶关市南华寺成功举办“绿美广东平安古树守护行动”活动,并发布“我为古树上保险”计划,将为…

Qt实现水平方向流式布局FlowLayout简单又实用!

Qt中常见的布局管理器有: QHBoxLayout:水平布局(常用) QVBoxLayout:垂直布局(常用) QGridLayout:表格布局(常用) QFormLayout:表单布局&#…

4.分支与循环

逻辑控制分为三部分: 1.顺序结构---》顺序执行代码 2.分支结构---》if语句和switch语句 3.循环执行---》for语句 while语句 和do while语句 顺序结构比较简单,按照代码书写的顺序一行一行执行 分支结构(if、switch语句) 也就是…

StarCloud开源行动:激发算力调度的创新潜力

01 关于StarCloud OpenCSG StarCloud 是一个集开源系统(Kubernetes ,K8S)与高性能计算(High Performance Computing,HPC)一体的混合算力调度平台。它专注于大模型训练和推理,并提供一站式服务,包括从训练到部署,以及多模型比较等。除了在人…

【OpenVINO™】在 C# 中使用OpenVINO™ 部署PP-YOLOE实现物体检测

前言 OpenVINO™ C# API 是一个 OpenVINO™ 的 .Net wrapper,应用最新的 OpenVINO™ 库开发,通过 OpenVINO™ C API 实现 .Net 对 OpenVINO™ Runtime 调用,使用习惯与 OpenVINO™ C API 一致。OpenVINO™ C# API 由于是基于 OpenVINO™ 开发…

DevOps 温故知新

【引】伴随着微服务架构以及云技术的广泛使用,DevOps相应地引起了人们的关注,尤其在互联网企业展开了大量的探索和实践。去年赋闲在家的时候, 有幸精读了三本书,分别是《持续架构实践——敏捷和DevOps时代下的软件架构》&#xff…

Linux安装MySQL(CentOS 7)

安装步骤 下载的MySQL版本为mysql-8.0.26 进入网站MySQL,点击下载 找到mysql社区版 点击Archive,查看所有相关不同版本 点击MySQL Community Server 注意下载MySQL对应的Linux版本,CentOS7 对应 Linux7,如果下成Linux 8 则后面…

SpringFramework简述

springFramework简述 Spring Framework是一个开源的企业级Java应用程序框架,由Rod Johnson创建,首次发布于2003年。Spring的核心理念在于简化企业级Java开发并提高其可测试性,它通过提供一个全方位的基础架构支持,帮助开发者关注于…

定制XavierNX载板接入OrinNX核心板HDMI工作异常问题调试

1.前言 Jetson Xavier NX模块(8GB/16GB)载板。 在最终迁移到Jetson Orin NX 8GB模块之前,希望使用它来验证硬件 遵循了这里的建议,将定制载体板+ Jetson Orin NX 8GB SoM的组合放在上面: sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \-c…

【Web后端】EL_JSTL

1.EL 1.1 概念 EL表达式,Expression Language,表达式语言。主要作用,在isp页面上获取数据,擅长查找对象,配合JSTL,使ISP页面摆脱大量的iava代码片 1.2 语法 语法格式 ${表达式内容} 1.3 范围作用域 pag…

202309青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 yyh[2023,杭州亚运会,[拱宸桥,玉琮莲叶]]jxwyyh[2][0]print(jxw[1]*2)以上代码运行结果是?( ) A :宸宸 B :杭杭 C :玉玉 D :州州 *正确答案:A 试题解析: jxwyyh[2][0],jxw的值是“拱宸桥”,…

解决SpringBoot整合MyBatis和MyBatis-Plus,请求后不打印sql日志

问题发现 在整合springBootmyBatis时,发现请求不打印sql日志,示例代码如下: RestController public class MyController {AutowiredProductMapper productMapper;GetMapping("/test")public void test() {System.out.println(&qu…