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

news/2024/11/7 11:00:49/

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.ppmy.cn/news/64162.html

相关文章

6 接口、多态、断言、项目【Go语言教程】

6 接口、多态、断言、项目【Go语言教程】 1 接口 1.1 概念 Golang 中 多态特性主要是通过接口来体现的。 interface 类型可以定义一组方法&#xff0c;但是这些不需要实现。并且 interface 不能包含任何变量。到某个自定义类型(比如结构体 Phone)要使用的时候,在根据具体情况…

AI自动写文章_免费在线原创文章生成器

自动写文章生成器 自动写文章生成器是一种利用人工智能和自然语言处理技术&#xff0c;帮助用户快速生成文章的工具。该软件可以根据用户的需求和选择&#xff0c;自动生成符合要求的文章&#xff0c;无需手动编写和修改。 自动写文章生成器的主要功能包括以下几个方面&#…

vcomp140.dll怎么安装?提示vcomp140.dll丢失怎样修复?

在用电脑玩游戏或者打开软件工作的时候&#xff0c;电脑提示vcomp140.dll丢失无法执行此代码&#xff0c;是什么回事呢&#xff1f;需要怎么修复呢&#xff1f;不用紧张&#xff0c;小编今天就把vcomp140.dll文件修复方法分享给大家。我总结了几个修复经验&#xff1b; vcomp14…

程序中各种异常报错,对于JVM调优记录

一&#xff1a;GC overhead limit exceeded 数据量过大&#xff1a;当应用程序处理大量的数据时&#xff0c;会占用大量的内存和计算资源。如果内存资源不足&#xff0c;则可能会在垃圾回收过程中出现 GC overhead limit exceeded 错误 程序代码有问题&#xff1a;如果 应用程…

利用Eigen求解不同坐标系的旋转矩阵

不同坐标系之间的刚性转换以及实现&#xff1a; 坐标系转换原理如下&#xff0c;使用了仿射变换实现了旋转平移&#xff1a; [ r 11 r 12 t x r 21 r 22 t y 0 0 ] ∗ [ x y 1 ] [ x ′ y ′ 1 ] \begin{bmatrix} r_{11} & r_{12}& t_x\\ r_{21}& r_{22}& t…

IDEA创建接口类和接口实现类

IDEA创建接口类和接口实现类 IDEA创建接口类IDEA创建接口实现类 以创建Dao包下的代码为例。 IDEA创建接口类 选中要创建接口类的package&#xff0c;右键菜单依次选择New——Java Class。 在弹出的界面中&#xff0c;将创建的对象类型由Class改为Interface&#xff0c;如下图…

JUC(十二)-线程中断相关问题(LockSupport,sleep,InterruptException)

JUC线程中断相关问题总结 线程中断相关问题总结 JUC线程中断相关问题总结一、 sleep 和线程中断之间的关系和特点结论测试验证代码如下 二、 LockSupport 和线程中断之间的关系结论测试验证代码如下 一、 sleep 和线程中断之间的关系和特点 结论 线程调用 Thread.sleep之后会进…

【设计模式】装饰器模式篇

Decorator Pattern 1、定义 装饰器模式是一种结构型设计模式&#xff0c;它允许我们在不改变对象自身的基础上&#xff0c;动态地给对象添加新的行为。 在装饰器模式中&#xff0c;我们定义一个装饰器类&#xff0c;该类实现了与被装饰对象相同的接口&#xff0c;并持有一个…