Mysql的所有数据类型和它们的区别

news2024/9/19 10:36:56

一、数值类型

1. 普通整数数值类型

以下数据类型只能用以保存整数

整数数值类型
类型存储大小(字节)有符号的取值范围(允许存在负数)无符号的取值范围
TINYINT1-128 ~ 1270 ~ 255
SMALLINT2- 327678 ~ 327670 ~ 65535
MEDIUMINT3- 8388608 ~ 83886070 ~ 1677215
INT4- 2147483648 ~  21474836470 ~ 4294967295
BINTINT5- 9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615

2. 严格数值数据类型

        保存必须为确切精度的数值,对于需要运用到计算中的数据正确性比近视数值数据类型更高。适合用来存储金额、科学数据等。

严格数值数据类型
类型说明
INTEGER整数数据类型,类比INT类型
SMAIIINT取值范围比较小的整数数据类型
DECIMAL

浮点数数据类型,使用规则是DECIMAL(M,D)。M是精度,D是标度;精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。

M默认为10,D默认为0;M范围为1 ~ 65 (旧版mysql范围是 1 ~ 254),D范围默为0~30,且不能超过M;可以存储正数、负数和0

NUMERIC严格数值的浮点数,使用规则同DECIMAL一样。

3. 近似数值数据类型

        一下数据类型都可以用来存储浮点数,既有小数点的数。但因以下数据类型是近似数值数据类型,存储时是采用二进制表示,因此存在精度问题。所以再存储需要用来做计算和大小比较的数据时推荐使用 DECIMAL。

近似数值数据类型
类型说明有符号的取值范围
FLOAT浮点数数据类型;4字节单精度;使用方法 FLOAT(M,D);占用的存储空间比DOUBLE小-3.402823466E+38到3.402823466E+38
DOUBLE浮点数数据类型;8字节双精度;使用方法 DOUBLE(M,D); 精度比FLOAT更精确-1.7976931348623157E+308到1.7976931348623157E+308
REAL浮点数数据类型

二、时间和日期类型

 1. ‘伪日期比null更省空间’

允许将'0000-00-00'保存为“伪日期”(如果不使用NO_ZERO_DATE SQL模式)。这在某些情况下比使用NULL值更方便(并且数据和索引占用的空间更小)

2. 开启ALLOW_INVALID_DATES SQL模式,允许保存不合法的日期

        若想保存不合法的日期,例如2023-11-31 ,那么MySQL将给会出警告或错误。但业务需要执意要保存这种错误格式,那么我们可以开启ALLOW_INVALID_DATES SQL模式。

在这种模式下,MySQL只验证月范围为从0到12,日范围为从0到31。这些范围可以包括零,因为MySQL允许在 DATE 或 DATETIME 列保存日/月和日是零的日期。这在应用程序需要保存一个你不知道确切日期的生日时非常有用。在这种情况下,只需要将日期保存为'1999-00-00'或'1999-01-00'。

        但需要注意的一点是,如果保存此类日期,DATE_SUB()或DATE_ADD等需要完整日期的函数不会得到正确的结果。

3. 不想在日期中出现0,使用NO_ZERO_IN_DATE SQL模式

4. DATETIME、DATE、TIMESTAMP和YEAR类型,MySQL使用以下规则解释含模糊年值的日期:

·         00-69范围的年值转换为2000-2069。(本世纪)

·         70-99范围的年值转换为1970-1999。(上世纪)

5. Mysql的时间函数

                Mysql时间函数大全-CSDN

        时间和日期类型
类型数据格式数值范围示例说明
DATEYYYY-MM-DD 2023-11-30
DATETIMEYYYY-MM-DD  HH:MM:SS2023-11-30 14:34:40,允许“不严格”语法:任何标点符都可以用做日期部分或时间部分之间的间割符,例如2023.11.30 14:34:40同前面的格式是一样的日期
TIMESTAMP

YYYY-MM-DD  HH:MM:SS       

 
    

1970 ~ 2037;

    可以设置为自动初始化当前时间戳或自动更新

        以UTC格式保存,存储时对当前的时区进行转换,检索时再转换回当前的时区

TIMEHH:MM:SS-838:59:59 ~ 838:59:59

示例值: 14:34:40

可为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。

YEARYYYY

四位数字或字符串:1901 ~ 2155

两位字符串:00~99

两位整数:1 ~ 99

2023

三、字符串(String)类型

1. 字符集

        ASCII属性为CHAR列分配latin1字符集。UNICODE属性分配ucs2字符集。

2. BINARY的填充

        (1)设计表money为binary

(2) 插入数据

insert into number value (10,'a');

(3)查询比对,第一条sql是只查询a,第二天sql是加上拼接的0字节进行的查询

3. 严格模式的开启对字符串存储的影响

        如果存入的数据超过规定的长度,则会被截取。当开启严格模式的时候,SQL将会产生错误,然后值会被拒绝。

        当严格模式未开启的时候,则只会产生一条警告,然后数据被截取后存入。

字符串类型
共同点类型长度范围说明

CHAR 和 ARCHAR

(两者在存储和检索中都不进行大小写转换)

1. 索引前缀长度可选CHAR0 ~ 255 (字符)

长度将在设置时固定

当保存数值不足设置的长度时候,会在右侧填充空格达到指定的长度,检索的时候尾部的空格会被删除,所以如果存入的数据末尾存在空格,被检索的时候就会被删除。

VARCHAR0 ~ 65535 (字符)

可变长度字符串,不会进行填充。

BINARY 和 VARBINARY

1.类比VARCHAR,包含二进制字符串,包含字节字符串

2. 没有字符集,并且排序和比较基于列值字节的数值值。

BINARY0 ~ 255 (字节)

长度将在设置时固定;

当保存数值不足设置的长度时候,会在右侧填充0x00(零字节)达到指定的长度;

大小上: 0x00 < 空格;

VARBINARY0 ~ 65535 (字节)

可变长度字节串,不会进行填充。

BLOB 和 TEXT

(两者在存储和检索中都不存在大小写转换)

1. 当保存或检索时不删除尾部空格

2. 不能有默认值;

3. 必须指定索引前缀的长度

BLOB

单位:(字节)

TINYBLOB:0~255

BLOB:0~65,535

 MEDIUMBLOB:0~16,777,215

 LONGBLOB:0~4,294,967,295

【字节字符串】

1. 是一个二进制大对象,可以容纳可变数量的数据

2. 有4种BLOB类型: TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

3. BLOB列没有字符集,排序和比较基于列值字节的数值值
4. 会占用大量存储空间

TEXT

单位:(字节)

TINYTEXT:0~255

TEXT:0~65,535

MEDIUMTEXT:0~16,777,215

LONGTEXT:0~4,294,967,295

【字符字符串】

1. 有4种TEXT类型: TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT

对应4种BLOB类型,有相同的最大长度和存储需求。

2. 有一个字符集,排序和比较根据字符集的校对规则。

ENUM1 ~ 65,535(元素)

1. ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值

2.允许是空字符串‘’或null;

3.如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素;

4.每个枚举值有一个索引,允许的值列中的值从1开始编号,空字符串错误值的索引值是0;

5. 如果将一个数字保存到ENUM列,数字被视为索引,并且保存的值是该索引对应的枚举成员;

SET1-64(成员)

1.SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值;

2.当创建表时,SET成员值的尾部空格将自动被删除

3.为列分配值时需注意大小写

4.SET值按数字顺序排序。NULL值排在非NULL SET值的前面

四、多维上的点、线、面、几何类型

点、线、面类型
类型格式说明
POINT

POINT(x y);

x为经度,y为维度。两者之间用空格相隔开

存储二维平面地理坐标的单个点
MULTIPOINT

MULTIPOINT(x1 y1, x2 y2, x3 y3)

可以存储多个点,点与点用逗号分隔

存储二维平面地理坐标的多个个点
LINESTRING

LINESTRING(x1 y1,x2 y2,x3 y3)

x为经度,y为维度。点与点用逗号分隔,经纬度之间用空格分隔

线存储一组连续的直线段
MULTILINSTRING

MULTILINESTRING((x1 y1, x2 y2), (x3 y3, x4 y4))

可以存储多个直线,直线与直线用集合形式下的逗号分隔

存储一多个连续的线段
POLYGON

POLYGON((x1 y1,x2 y2,x3 y3,x4 y4),(x5 y5,x6 y6,x7 y7,x8 y8))

x为经度,y为维度。点于点用逗号分隔,经纬度之间用空格分隔

存储一个面
MULTIPOLYGONPOLYGON(((x1 y1,x2 y2,x3 y3,x4 y4)),((x5 y5,x6 y6,x7 y7,x8 y8)))存储多个面
GEOMETRY

GEOMETRY(POINT(x1 y1))

里面可以跟子类中的任意一个

几何体

存储一个几何体;

它是所有空间集合类型的基类,其他类型如POINT、LINESTRING、POLYGON都是它的子类。

GEOMETRYCOLLECTIONGEOMETRYCOLLECTION(POINT(x1 y1), POINT(x2 y2), LINESTRING(x3 y3,x4 y4))存储多个几何体

五、JSON类型

JSON类型
类型说明
JSON

主要用于存储json对象和json数组两种格式的数据,当JSON类型的数据插入时,会自动校验数据格式,若不是JSON则会报错。

字段可以无线拓展

会自动处理稀疏字段,避免了null值造成的冗余存储

支持索引

此功能是mysql 5.7之后才支持的功能。

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

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

相关文章

性能优化 vue2/vue3 通过CDN 减少项目启动时间

其实更多可以通过压缩图片等文件大小 也会让项目运行快一些 以及尽量使用异步或者懒加载 使用CDN可以避免在项目中使用npm导入Vue的依赖项&#xff0c;从而减少项目启动时的加载时间 使用方法如下 <!-- Vue 2 --> <script src"https://cdn.jsdelivr.net/npm/vue…

Linux上使用一分钟搞定Kafka的安装

文章目录 一、前言二、安装三、验证是否安装成功 一、前言 一般我们要安装Kafka&#xff0c;还需要先安装JDK和Zookeeper&#xff0c;并进行相关配置。因为Kafka和Zookeeper都是运行在JVM之上的服务&#xff0c;所以需要先安装JDK。另外&#xff0c;Kafka依赖Zookeeper管理集群…

Python常用文件操作库详解与示例

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 文件操作是编程中常见的任务之一&#xff0c;而Python提供了丰富的文件操作库&#xff0c;使得文件的读取、写入、复制、移动等操作变得非常便捷。本文将深入介绍一些Python中常用的文件操作库&#xff0c;以及它…

CSS import 规则

导入 “navigation.css” 样式到当前的样式表&#xff1a; import “navigation.css”; /* 使用字符串 / 或者 import url(“navigation.css”); / 使用 url 地址 */ 属性定义及使用说明 CSS import 用于从其他样式表导入样式规则。 import 规则必须在 CSS 文档的头部&#xff…

NSSCTF第15页(2)

[GKCTF 2020]ez三剑客-easynode 有源代码&#xff0c;点进来看 const express require(express); const bodyParser require(body-parser);const saferEval require(safer-eval); // 2019.7/WORKER1 找到一个很棒的库const fs require(fs);const app express();app.use(b…

设计模式——单例模式(Singleton Pattern)

概述 单例模式确保一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供整个实例&#xff0c;这个类称为单例类&#xff0c;它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式有三个要点&#xff1a;一是某个类只能有一个实例&#xff1b;二是它必须自行…

使用发布订阅模式处理多维度复杂融合场景

场景再现&#xff1a; 模式正确封装方法&#xff1a; class Strategy {map new Map();constructor({ defaultCbs, errorCbs }) {// 默认this.map.set("default", defaultCbs ?? []);// 错误this.map.set("error", errorCbs ?? []);}// 获取条件keyg…

linux ksm实现与代码简述

KSM 全称是 Kernel Samepage Merging&#xff0c;表示相同的物理页只映射一份拷贝。 原理 在ksm初始化时&#xff08;ksm_init&#xff09;&#xff0c;注册了一个ksm_scan_thread线程&#xff0c;这个线程的核心入口是ksm_do_scan。当对一个进程第一次通过madvice(MADV_MERGE…

2023年度盘点:AIGC、AGI、GhatGPT、人工智能大模型必读书单

2023年是人工智能大语言模型大爆发的一年&#xff0c;一些概念和英文缩写也在这一年里集中出现&#xff0c;很容易混淆&#xff0c;甚至把人搞懵。 LLM&#xff1a;Large Language Model&#xff0c;即大语言模型&#xff0c;旨在理解和生成人类语言。LLM的特点是规模庞大&…

代码随想录算法训练营 | day49 动态规划 121.买卖股票的最佳时机,122.买卖股票的最佳时机Ⅱ

刷题 121.买卖股票的最佳时机 题目链接 | 文章讲解 | 视频讲解 题目&#xff1a;给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设…

【详细解答】项目经VS产品经理,有什么区别?哪个更值得选择?

最近很多人咨询“项目经理跟产品经理该怎么选&#xff0c;我更适合哪个&#xff1f;”“项目经理跟产品经理哪个更有钱途 ”“项目经理转产品经理好转吗”等等&#xff0c;今天就一次性说清楚项目经理跟产品经理有什么区别&#xff0c;应该怎么选择。 不想看长篇大论的&#x…

Python 递归、闭包与装饰器的编程魔法

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python编程中&#xff0c;递归、闭包和装饰器是一些强大的工具&#xff0c;它们能够为代码增色不少&#xff0c;提高代码的可读性和灵活性。本文将深入探讨这三种编程魔法的原理和应用&#xff0c;通过丰富的示…

JavaScript实现飘窗功能

实现飘窗功能很简单 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

Certbot实现 HTTPS 自动续期

Certbot实现 HTTPS 自动续期 以前阿里云支持申请一年的免费https证书&#xff0c;那每年我们手动更新证书并没什么大问题&#xff0c;但现在阿里云的免费证书仅支持3个月&#xff0c;这意味着每三个月都要要申请一下证书显得非常麻烦。 下面我们使用Certbot实现ssl证书的自动…

记录hive/spark取最新且不为null的方法

听标题可能听不懂我想表达的意思&#xff0c;我来描述一下我要做的事&#xff1a; 比如采集同学对某一网站进行数据采集&#xff0c;同一个用户每天会有很多条记录&#xff0c;所以我们要取一条这个用户最新的状态&#xff0c;比如用户改了N次昵称&#xff0c;我们只想得到最后…

kubeadm搭建单master多node的k8s集群--小白文,图文教程

参考文献 K8S基础知识与集群搭建 kubeadm搭建单master多node的k8s集群—主要参考这个博客&#xff0c;但是有坑&#xff0c;故贴出我自己的过程&#xff0c;坑会少很多 注意&#xff1a; 集群配置是&#xff1a;一台master&#xff1a;zabbixagent-k8smaster&#xff0c;两台…

C语言leetcode集训一:数组

为了进一步巩固C语言基础&#xff0c;同时进一步了解leetcode刷题的流程&#xff0c;开始进行C语言的集训&#xff0c;今天是第一天&#xff0c;看看我都做了哪些题&#xff0c;因为周末&#xff0c;有点颓废&#xff0c;所以基本上都是简单题&#xff0c;现在只想睡觉...... 有…

ultralytics yolo图像分类训练案例;pytorch自有数据集图像分类案例

1、ultralytics yolo图像分类训练案例 优点:使用方便,训练过程评估指标可以方便查看 缺点:自带模型少,可选择自定义小 参考:https://docs.ultralytics.com/tasks/classify/#val https://blog.csdn.net/weixin_42357472/article/details/131412851 1)数据集格式 https://…

一文让你认识什么是springboot(创建第一个 SpringBoot 程序)

文章目录 前言1. 环境准备2. Maven3. 第一个 SpringBoot 程序3.1 SpringBoot 介绍3.2 SpringBoot 项⽬创建3.2.1 使用 IDEA 创建3.2.2 网页版创建&#xff08;了解&#xff09; 3.3 项目代码和目录介绍3.3.1 观察pom⽂件3.3.2 父工程3.3.3 目录介绍 3.4 运行项目3.5 输出 Hello…

STM32——串口

串口发送/接收函数&#xff1a; HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制 HAL_UART_Receive(); 串口接收数据&#xff0c;使用超时管理机制 HAL_UART_Transmit_IT(); 串口中断模式发送 HAL_UART_Receive_IT(); 串口中断模式接收 HAL_UART_Tran…