MySQL---10、详细的数据类型

news2024/9/20 15:07:06

1、MySQL中的数据类型

类型类型举例
整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型FLOAT、DOUBLE
定点数类型DECIMAL
位类型BIT
日期时间类型YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型CHAR、VACHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型ENUM
集合类型SET
二进制字符串类型BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型JSON对象、JSON数组

常见数据类型的属性:

MySQL关键字含义
NULL数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT默认值
PRIMARY KEY主键
AUTO_INCREMENT自动递增,适用于整数类型
UNSIGNED无符号
CHARACTER SET name指定一个字符集

2、整数类型介绍

整数类型一共有5种,包括TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和BIGINT

整数类型字节有符号数取值范围无符号取值范围
TINYINT1-128~1270~255
SMALLINT2-32768~327670~65535
MEIDUMINT3-8388608~83886070~16777215
INT、INTEGER4-2147483648~21474836470~4294967295
BIGINT8-9223372036854775808~92233720368547758070~18446744073709551615

2.1可选属性

2.1.1 M
M:表示显示宽度,M的取值范围是(0,255)。
2.1.2 UNSIGNED
UNSIGNED:无符号类型(非负)
2.1.3 ZEROFILL
ZEROFILL:0填充

3、浮点数类型介绍

浮点数和定点数类型的特点是可以处理小数。
Float:表示单精度浮点数
Double:表示双精度浮点数

在这里插入图片描述
MySQl存储浮点数的格式为:符号(S)、尾数(M)和阶码(E)。因此无论有没有符号,MySQL的浮点数都会存储表示符号的部分。

3.1 数据精度说明

对于浮点数类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
1、MySQL允许使用非标准语法(其他数据库未必支持,因此如果涉及到数据迁移,则最好不要这么用):Float(M,D)或Double(M,D)。这里,M称为精度,D称为标度。(M,D)中M=整数位+小数位,D=小数位。D<=M<=255,)<=D<=30。
2、Float和Double类型在不指定(M,D)时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示。
3、浮点类型也可以加Unsigned,但是不会改编数据范围,只是没有负数了。
4、从MySQL8.0.17开始已经不推荐使用了。
5、注意:因为浮点数数不准确的,所以我们要避免使用"="来判断两个数是否相等。

4、定点数类型介绍

MySQL中的定点数类型只有Decimal一种类型
Decimal(M,D)、DEC、NUMERICM+2字节有效范围由M和D决定

1、Decimal(M,D)的最大取值范围与Double类型一样,但是有效的数据范围是由M和D决定。
2、定点数在MySQL内部时以字符串的形式进行存储的,这就决定了它一定是精准的。
3、当Decimal类型不知道精度和标度的时候,其默认为Medical(10,0)。当数据的精度超出了定点数类型的精度范围的时候,MySQL同样会进行四舍五入处理。
4、浮点数VS定点数
浮点数相对于定点数的优点是在长度一定的情况下,浮点类型取值范围大,但是不精准,适用于需要取值范围大,又可以容忍小误差的科学计算场景。
定点数取值范围相对小,但是精准,没有误差,适合于对精度要求极高的场景。

5、位类型:BIT

BIT类型中存储的是二进制值,类似010110
二进制字符串类型长度长度范围占用空间
BIT(M)M1<=M<=64约为(M+7)/8个字节

BIT类型,如果没有指定(M),默认是1位,表示只能存1位的二进制。

6、日期和时间类型

1、Year类型表示年
2、Date类型表示年、月、日
3、Time类型表示时、分、秒
4、DateTime类型表示年、月、日、时、分、秒
5、TimeStamp类型表示带时区的年、月、日、时、分、秒
类型名类型占用字节格式开始时间结束时间
Year1YYYY或YY19012155
Time时间3HH:MM:SS-838:59:59838:59:59
Date日期3YYYY-MM-DD1000-01-019999-12-03
DateTime日期时间8YYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-13 23:59:59
TimeStamp日期时间4YYYY-MM-DD HH:MM:SS1970-01-0100:00:00 UTC2038-01-19 03:14:07UTC

7、文本字符串类型

在这里插入图片描述

7.1 CHAR与VARCHAR类型

字符串(文本)类型特点长度长度范围占用的存储空间
CHAR(M)固定长度M0<=M<=255M个字节
VARCAHR(M)可变长度M0<=M<=65535(实际长度+1)个字节

Char类型:
1、Char(M)类型一般需要预先定义字符串长度。如果不指定(M),则长度默认是一个字符。
2、如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在右侧填充空格以达到指定的长度。当MySQL检索Char类型的数据时,Char类型的字段会去除尾部的空格。
3、定义CHar类型字段时,声明的字段长度即为Char类型字段所占的存储空间的字节数。

Varchar类型:
1、Varchar(M)定义时,必须指定长度M,否则报错。
2、MySQL4.0版本以下,Varchar(20):指的是20个字节,如果存放UTF8汉字时,只能存放6个汉字(每个汉字3个字节);MySQL5.0版本以上,Varchar(20)指的是20字符。
3、检索Varchar类型的字段数据时,会保留数据尾部的空格。Varchar类型的字段所占用的存储空间为字符串实际长度加一个字节。

哪些情况下使用Char或Varchar更好

类型特点空间上时间上适用场景
Char(M)固定长度浪费存储空间效率高存储不大,速度要求高
Varchar(M)可变长度节省存储空间效率低非Char的情况

InnoDB存储引擎,建议使用Varchar类型。因为对于InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且主要一下性能的因素是数据行使用的存储总量,由于char平均占用的空间多余Varchar,所以除了简短并且固定长度的,其他考虑Varchar。这样节省空间,对磁盘I/o和数据存储总量比较好。

7.2 Text类型

在MySQL中,Text用来保存文本类型数据,总共包含4种类型,分别为TinyInt、Text、MediumText、LongText类型。
在向Text类型的字段保存和查询数据的时候,系统自动按照实际长度存储,不需要预先定义长度。这一点和Varchar类型一样。

在这里插入图片描述
注意:
1、由于实际存储的长度的不确定,MySQL不允许Text类型的字段做主键。
2、如果不是特别大的内容,建议使用Char和Varchar类型来替代。

8、 ENUM类型

Enum类型也叫做枚举类型,Enum类型的取值范围需要再定义字段的时候进行指定。设置字段值的时候,Enum值类型值允许从成员选取单个值,不能一次选取多个值。
其所需要的存储空间由定义Enum类型时指定的成员个数所决定。
文本字符串类型长度长度范围占用的存储空间
EnumL1<=L<=655351或2个字节
1、当Enum类型包含1~255个成员,需要1个字节的存储空间。
2、当Enum类型包含256~65535个成员,需要2个字节的存储空间。
3、Enum类型的成员个数的上限为65535个。

创建表如下:

Create table test_enum(
	season Enum('春','夏','秋','冬','unknow')
);

9、 Set类型

当Set类型包含的成员个数不同时,其所占的存储空间也是不同的。
成员个数范围(L表示实际成员个数)占用的存储空间
1<=L<=81个字节
9<=L<=162个字节
17<=L<=243个字节
25<=L<=324个字节
33<=L<=648个字节
创建表如下:
Create table test_set(
	s Set('A','B','C')
);

注意:
1、插入重复的Set类型成员时,MySQL会自动删除重复的成员
2、向Set类型的字段插入Set成员不存在的值的时,MySQL会抛出异常。

10、 Binary和VarBinary类型

Binary和VarBinary类似于Char和VarChar,只是它们存储的是二进制字符串。
二进制字符串类型特点值的长度占用空间
Binary(M)固定长度M(0<=M<=255)M个字节
VarChar(M)可变长度M(0<=M<=65535)M+1个字节

注意:VarChar必须指定M,否则会保错。

11、 BLOB类型

Blob是一个二进制大对象,可以容纳可变数量的数据。 
MySQL类型包括TinyBlob、Blob、MediumBlob、LongBlob。它们可容纳值的最大长度不同,可以存储·一个二进制的大对象,比如图片、音频和视频等等。

在这里插入图片描述
Text和Blob的使用注意事项:
1、 BLOB和TEXT值也会引起自己的一些问题,特别是执行了大量的删除或更新操作的时候。删除这种值会在数据表中留下很大的" 空洞 ",以后填入这些"空洞"的记录可能长度不同。为了提高性能,建议定期使用 OPTIMIZE TABLE 功能对这类表进行 碎片整理 。
2、 如果需要对大文本字段进行模糊查询,MySQL 提供了 前缀索引 。但是仍然要在不必要的时候避免检索大型的BLOB或TEXT值。例如,SELECT * 查询就不是很好的想法,除非你能够确定作为约束条件的WHERE子句只会找到所需要的数据行。否则,你可能毫无目的地在网络上传输大量的值。
3、把BLOB或TEXT列 分离到单独的表 中。在某些环境中,如果把这些数据列移动到第二张数据表中,可以让你把原数据表中的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会 减少主表中的碎片 ,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT * 查询的时候不会通过网络传输大量的BLOB或TEXT值。

12、 JSON类型

JSON(JavaScript Object Notation)是一种轻量级的 数据交换格式 。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。它易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式。

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

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

相关文章

Java设计模式-装饰模式

简介 装饰模式在Java领域是一种常见的设计模式&#xff0c;它能够在不改变对象原有结构的情况下&#xff0c;动态地为对象添加新的功能。它通过封装原有对象&#xff0c;在运行时动态地为对象添加新的行为或者修改原有行为&#xff0c;以扩展对象的功能。这种方式避免了继承的…

C语言:简单的三子棋游戏

谈到三子棋&#xff0c;想必大家都不陌生&#xff0c;童年的回忆呀&#xff0c;读小学的时候有事没事就和同学玩上个几把&#xff0c;玩起来很得劲&#xff0c;作为一个学习计算机的博主&#xff0c;自然而然用代码来实现三子棋啦&#xff0c;再次感受童年的记忆&#xff0c;闲…

yolov8 实例分割 C++部署

此处仅为个人结果记录&#xff0c;并无完整部署代码 目录 Pre 一、OpenCV DNN C 部署 二、ONNX RUNTIME C 部署 Pre 一定要知道&#xff0c;yolov8的输出与Yolov5 7.0 实例分割的输出不一样&#xff0c; output0: float32[1,116,8400]。 116是4个box坐标信息80个类别概率…

政务场景|看「API-SMAC」如何守好API,保障流动数据安全

API让一切都变得更加容易。 在数字化进程加速中&#xff0c;API作为高速通道&#xff0c;让数据的流动变得更加自由。当然&#xff0c;黑客也这么认为。从前窃取数据需要攻入内网&#xff0c;再经过一系列复杂的横向移动最终访问目标数据库&#xff0c;极易被安全设备拦截。现在…

endNote X9 增加 / 删除参考文献 文献编号自动更新

文章目录 1 增插参考文献2 删减参考文献3 EndNote X9 插入参考文献常见问题总结4 EndNote X9 快速上手教程&#xff08;毕业论文参考文献管理器&#xff09; 1 增插参考文献 当前已经插入5个文献&#xff0c;文献编号及附录列表如下 例如在&#xff0c;2和3之间新插入文献 “邱…

基于粒子群优化算法的最佳方式优化无线传感器节点的位置(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 此代码优化了由于电池耗尽而产生覆盖空洞后 WSN 节点的位置。如果活动通信中的任何节点死亡&#xff0c;则通过PSO优化再次定位…

动态联编和静态联编

基本概念 1.静态联编&#xff08;早联编&#xff09;&#xff1a;在程序被编译时进行联编。程序执行快&#xff0c;但灵活性较小。 2.动态联编&#xff08;晚联编&#xff0c;滞后联编&#xff09;&#xff1a;编译时无法确定要调用的函数&#xff0c;在程序运行时联编。灵活…

代码随想录算法训练营day37 | 738.单调递增的数字,968.监控二叉树

代码随想录算法训练营day37 | 738.单调递增的数字&#xff0c;968.监控二叉树 738.单调递增的数字968.监控二叉树&#xff08;难&#xff09; 738.单调递增的数字 教程视频&#xff1a;https://www.bilibili.com/video/BV1Kv4y1x7tP/?spm_id_from333.788&vd_sourceddffd5…

Pytorch环境下基于Transformer的滚动轴承故障诊断

关于python的集成环境&#xff0c;我一般Anaconda 和 winpython 都用&#xff0c;windows下主要用Winpython&#xff0c;IDE为spyder&#xff08;类MATLAB界面&#xff09;。 winpython脱胎于pythonxy&#xff0c;面向科学计算&#xff0c;兼顾数据分析与挖掘&#xff1b;Anaco…

如何恢复数据?数据恢复,5个实用方法!

案例&#xff1a;如何恢复数据 【我是个比较粗心的人&#xff0c;总是会莫名奇妙的就丢失各种电脑的数据&#xff0c;想问下大家在使用电脑时&#xff0c;如果有数据的丢失&#xff0c;是如何恢复数据的呢&#xff1f;】 在使用Windows电脑时&#xff0c;数据丢失或删除是非常…

支付系统设计二:统一开发框架

文章目录 前言一、项目分层二、模块职责简介1. API层2. Service层2.1 操作执行服务2.2 操作器2.3 操作执行器2.4 参数校验2.5 操作器实现 3. Domain层4. Infrastructure层4.1 Dal层 三、对应类图四、开发内容3.1 约定请求报文格式3.2 新增交易码与操作器映射枚举类3.3 配置参数…

2 # 函数柯里化

什么是函数柯里化 函数柯里化&#xff08;Currying&#xff09;是一种将接受多个参数的函数转换为一系列接受单一参数的函数的技术。 通过函数柯里化&#xff0c;我们可以将原来接受多个参数的函数&#xff0c;转换为一系列只接受单一参数的函数&#xff0c;每个函数接收一个…

前端面试题总结(初级前端:HTML + CSS + JavaScript + Ajax + Vue2全家桶)

theme: channing-cyan 求关注&#x1f62d; 壹、HTML CSS 1. 对HTML语义化的理解 去掉或者丢失样式的时候能够让页面呈现出清晰的结构&#xff1b;代码结构清晰&#xff0c;方便团队的管理和维护&#xff0c;并且语义化更具可读性&#xff1b;提升用户体验&#xff0c;在…

什么是daemon与服务(service)

什么是daemon与服务(service) 在Linux系统中&#xff0c;daemon是指一类在后台运行的服务进程&#xff0c;通常以d结尾。它们不与用户进行交互&#xff0c;也不接受用户的输入&#xff0c;而是在系统启动时自动启动并一直运行&#xff0c;为操作系统、应用程序和其他服务提供支…

Julia入门-3、Julia包管理工具

文章目录 0、Julia 的包管理工具是Pkg1、使用Julia包管理工具过慢 0、Julia 的包管理工具是Pkg Julia 的包管理工具是Pkg&#xff0c;可以用于安装、更新、卸载和管理 Julia 中的软件包。以下是一些常用的 Pkg命令&#xff1a; Pkg.add("Package")&#xff1a;安装一…

Node.js 与 WebAssembly

目录 1、简介 2、关键概念 3、生成WebAssembly模块 4、如何使用它 5、与操作系统交互 1、简介 首先&#xff0c;让我们了解为什么WebAssembly是一个很棒的工具&#xff0c;并学会自己使用它。 WebAssembly是一种类似汇编的高性能语言&#xff0c;可以从各种语言编译&…

深度学习 - 47.DIN 深度兴趣网络保姆级实现 By Keras

目录 一.引言 二.DIN 模型分析 1.Input 输入 2.Embedding & Concat 嵌入与合并 3.DIN 深度兴趣网络 4.MLP 全连接 三.DIN 模型实现 1.Input 2.DIN Layer 2.1 init 初始化 2.2 build 构建 2.3 call 调用 3.Dice Layer 3.1 init 初始化 3.2 build 构建 3.3 …

网络安全:渗透神器 kali 的安装.

网络安全&#xff1a;渗透神器 kali 的安装. Kali Linux是一款基于Debian的Linux发行版&#xff0c;专门用于渗透测试和网络安全评估。它包含了大量的渗透测试工具和网络安全工具&#xff0c;适用于各种不同的渗透测试场景和需求。 目录&#xff1a; 网络安全&#xff1a;渗透…

MS5814可选内置基准、四通道数模转换器

MS5814/5814T 是一款 12bit 四通道输出的电压型 DAC&#xff0c;集成可选内部基准&#xff0c;接口采用四线串口模式&#xff0c;可以兼容 TMS320、SPI、QSPI 和 Microwire 串口。MS5814/5814T 控制数据有 16bit&#xff0c;包括 DAC 地址&#xff0c;控制字节和 12bitDAC 数据…

MySQL——BasicKnowledge

1. Mysql Version ​​​​​​​​​​​​ 2.install & uninstall 2.1 Linux My Content 3.Configure 3.1 设置IP访问 参考链接 3.1.1 方法一&#xff1a;改表法 --登入mysql后&#xff0c;更改"mysql"数据库中"user"表里的 "host&quo…