【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.mfbz.cn/a/621173.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用友U8与旺店通的对接案例分析

在现代企业管理中,财务管理和电商运营管理是企业数字化转型的两个重要组成部分。用友U8作为企业的财务管理系统,与旺店通这一电商ERP系统的结合,可以为企业带来全面的数据整合和流程自动化。本文将通过轻易云集成平台的视角,分析用…

weblogic [WeakPassword]

一、漏洞描述 开放了wblogic端口,进去发现有任意读取文件漏洞,配合解密工具读出密码,登录后台传入webshell 二、影响版本 当前版本 三、影响组件 weblogic 四、漏洞判断 hello/file.jsp?path/etc/passwd 发现有任意文件下载 五、漏洞…

47.全排列

1.题目 47. 全排列 II - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/permutations-ii/description/ 2.思路 注意剪枝的条件 3.代码 class Solution {vector<int> path;vector<vector<int>> ret;bool check[9]; public:vector<…

防伪溯源一体化管理系统基于FastAdmin+ThinkPHP和Uniapp(源码搭建/上线/运营/售后/维护更新)

一款基于FastAdminThinkPHP和Uniapp进行开发的多平台&#xff08;微信小程序、H5网页&#xff09;溯源、防伪、管理一体化独立系统&#xff0c;拥有强大的防伪码和溯源码双码生成功能&#xff08;内置多种生成规则&#xff09;、批量大量导出防伪和溯源码码数据、支持代理商管理…

JavaScript数组(Array)方法 - toReversed、toSorted、toSpliced

最近发现几个数组方法&#xff0c;是一些常规方法的升级版&#xff0c;比较有意思&#xff0c;分享给大家 文章目录 一、温故二、知新toReversedtoSortedtoSpliced 一、温故 我们先来回顾几个比较常用的方法&#xff1a;reverse&#xff0c;sort&#xff0c;splice众所周知&a…

信号和槽基本概念

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、概述 二、信号的本质 三、槽的本质 一、概述 在 Qt 中&#xff0c;用户和控件的每次交互过程称…

【会议征稿】2024年软件自动化与程序分析国际学术会议(SAPA 2024)

目录 1. 会议官方2. 支持单位3. 大会简介4. 大会组委5. 征稿主题6. 会议出版7. 会议议程8. 参会方式9. 更多会议 1. 会议官方 重要信息&#xff1a; 大会官网&#xff1a;www.icsapa.org大会时间&#xff1a;2024.6.14-16日大会地点&#xff1a;中国-大理接受/拒稿通知&#…

品牌舆情都包含什么内容?建议收藏

一个品牌的声誉、形象、产品质量、服务质量等&#xff0c;无时无刻不在接受着大众的检验。互联网传播迅速&#xff0c;一个不好的舆论直接导致整个品牌的声誉受到严重影响。品牌舆情都包含什么内容&#xff1f;接下来伯乐网络传媒就来给大家讲一讲。 一、品牌舆情的基本构成 1…

数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

STM32+CubeMX移植HAL库实现SYN6288语音合成模块模块

这里写目录标题 SYN6288语音模块简介引脚定义注意要点CubeMX配置HAL库移植运行结果 SYN6288语音模块简介 SYN6288中文语音合成芯片是北京宇音天下科技有限公司于2010年初推出的一款性/价比更高&#xff0c;效果 更自然的一款中高端语音合成芯片。SYN6288通过异步串口(UART)通讯…

picoCTF-Web Exploitation-Java Code Analysis!?!

Description BookShelf Pico, my premium online book-reading service.I believe that my website is super secure. I challenge you to prove me wrong by reading the ‘Flag’ book!Here are the credentials to get you started: Username: “user”Password: “user” S…

计算机发展史故事【11】

爆发超新星 IBM 号称巨人&#xff0c;竟在巨型机领域败在小小的控制数据公司CDC 手下。在小型机领域&#xff0c;“霸主”DEC 公司的“后院”也曾“起火”&#xff0c;绝非一直风平浪静。 本世纪60 年代末&#xff0c;DEC 公司因开发小型电脑迅速崛起&#xff0c;赢得“小型机…

五子棋对战(网页版)

目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…

Android Studio Please select Android SDK

解决方案&#xff1a; 1、打开 SDK Manager 2、选择编辑&#xff08;Edit&#xff09; 3、 一直Next&#xff0c;直到完成&#xff0c;解决&#xff01;

科技查新中的工法查新点如何确立与提炼?案例讲解!

按《工程建设工法管理办法》( 建 质&#xff3b;2014&#xff3d;103 号) &#xff0c;工法&#xff0c;是指以工程为对象&#xff0c;以工艺为核心&#xff0c;运用系 统工程原理&#xff0c;把先进技术和科学管理结合起来&#xff0c;经过一定工程实践形成的综合配套的施工方…

redis安装与群集

项目需求&#xff1a; 1.安装redis 2.测试redis性能&#xff0c;100个并发连接&#xff0c;100000个请求测试 3.在当前数据库下创建键值对 a11,a22,a33,a44&#xff0c;a55 4.查看键值对 5.将a1改名为a11,将a2删除 5.将a3移动到1号数据库 6搭建redis集群(可选) 测试环境…

如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库

前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库&#xff0c;希望大家能觉得实用&#xff01; 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496…

vue3组件插槽

Index.vue: <script setup> import { ref, onMounted } from vue import Child from ./Child.vue import ./index.cssonMounted(() > {}) </script><template><div class"m-home-wrap"><Child>插槽</Child><div class&qu…

linux不小心将/etc/passwd用户文件清空或删除解决方法

大概思路&#xff1a;进入单用户模式将passwd-引子程序复制为删除的passwd用户文件&#xff0c;关闭selinux 此系统为&#xff1a;centos 7 1.在GRUB引导的时候按e进入编辑模式&#xff0c;linux16那一行的ro 修改为rw rd.break ‘ ’ 2.ctrlx执行 3.进入单用户模式后修改根…

Cocos 2048从创建到发布上线

一、制作2048小游戏过程 扫描体验2048小游戏 场景搭建&#xff0c;4X4棋盘和基础设置绘制背景板&#xff0c;包含预制体等信息考虑在棋盘中随机出现两个数字方块&#xff0c;数字为2&#xff0c;初始化操作滑动事件部分&#xff0c;让方块移动起来&#xff0c;每滑动一次就生成…
最新文章