二、MySQL 数据类型

数据类型

1. 数值类型(11)

1. 整数类型(6)

# 整数类型:
# 1. TINYINT:小整数
占用 1 个字节的存储空间。
有符号的取值范围是从 -128 到 127,无符号的取值范围是从 0255。
适用于存储一些小型的整数值,如性别(0 表示女,1 表示男)、状态标志等。

# 2. SMALLINT:短整数
占用 2 个字节的存储空间。
有符号的取值范围是从 -32768 到 32767,无符号的取值范围是从 065535。
常用于存储一些相对较小的整数数据,如年龄、月份等。

# 3. MEDIUMINT:中等整数
占用 3 个字节的存储空间。
有符号的取值范围是从 -8388608 到 8388607,无符号的取值范围是从 016777215。
可用于存储一些中等范围的整数,如小型计数器的值等。

# 4. INT 或 INTEGER:整数
占用 4 个字节的存储空间。
有符号的取值范围是从 -2147483648 到 2147483647,无符号的取值范围是从 04294967295。
是最常用的整数类型之一,适用于一般的整数数据存储,如用户 ID、订单号等。

# 5. BIGINT:长整数
占用 8 个字节的存储空间。
有符号的取值范围是从 -9223372036854775808 到 9223372036854775807,无符号的取值范围是从 018446744073709551615。
用于存储非常大的整数,如大型项目的编号、海量数据的自增主键等。

2. 定点数类型(2)

# 定点数类型:
# 1. DECIMAL 或 NUMERIC:
存储精确的小数数据。
使用时需要指定精度和标度,例如 DECIMAL(10,2) 表示总共 10 位数字,其中小数部分占 2 位。
适用于需要精确存储和计算的金融数据、货币金额等场景,如银行账户余额、商品价格等。

3. 浮点数类型(2)

# 浮点数类型:
# 1. FLOAT:
占用 4 个字节的存储空间。
单精度浮点数,可表示的范围约为 -3.402823466E+38 到 -1.175494351E-38、0 以及 1.175494351E-38 到 3.402823466E+38。
适用于对精度要求不是特别高的浮点数存储和计算,如科学计算中的近似值、一些测量数据等。

# 2. DOUBLE:
占用 8 个字节的存储空间。
双精度浮点数,可表示的范围约为 -1.7976931348623157E+308 到 -2.2250738585072014E-308、0 以及 2.2250738585072014E-308 到 1.7976931348623157E+308。
相比于 FLOAT,DOUBLE 具有更高的精度,可用于需要更精确浮点数计算的场景,但仍然存在一定的精度误差。

4. 位类型(1)

# 位类型:
# 1. BIT:位
用于存储位字段值。
可以指定存储的位数,例如 BIT(8) 表示存储 8 位的二进制数据。
适用于存储一些以位为单位的数据,如标志位、权限位等。

2. 字符类型(12)

1. 定长字符类型(1)

# 定长字符类型:
# 1. CHAR:
特点:CHAR 类型是定长的字符类型,在存储时会自动在右侧填充空格以达到指定的长度。例如,定义为 CHAR (10) 的字段,无论实际存储的字符长度是多少,都会占用 10 个字节的存储空间。
长度范围:CHAR 类型的最大长度为 255 字节。
适用场景:适用于存储长度固定的数据,如身份证号码、手机号码等,因为这些数据的长度是固定的,使用 CHAR 类型可以提高存储和检索的效率。

2. 变长字符类型(1)

# 变长字符类型:
# 1. VARCHAR:
特点:VARCHAR 类型是变长的字符类型,它只占用实际存储字符所需的空间,再加上一个字节或两个字节来记录字符串的长度。例如,存储 "MySQL" 这个字符串,使用 VARCHAR 类型时实际占用的空间就是字符串的长度 5 字节,再加上一个字节或两个字节来记录长度,而不是像 CHAR 类型那样固定占用指定长度的空间。
长度范围:VARCHAR 类型的最大长度为 65535 字节,但实际使用时可能会受到字符集和存储引擎的限制。例如,在 UTF-8 字符集中,一个字符可能占用 1-3 个字节,因此实际能够存储的字符数量会相应减少。
适用场景:适用于存储长度不确定且经常变化的文本数据,如文章标题、用户评论等,这样可以节省存储空间,提高存储效率。

3. 文本类型(4)

# 文本类型:
# 1. TINYTEXT:小文本
特点:TINYTEXT 类型用于存储较短的文本数据,它是一种变长类型,实际存储的长度取决于文本的内容。
长度范围:TINYTEXT 类型可以存储最多 255 个字符。
适用场景:适用于存储一些简短的说明、摘要等文本信息。

# 2. TEXT:文本
特点:TEXT 类型用于存储中等长度的文本数据,也是变长类型,能够根据实际存储的文本长度动态分配存储空间。
长度范围:TEXT 类型可以存储最多 65535 个字符。
适用场景:常用于存储文章内容、产品描述等相对较长的文本信息。

# 3. MEDIUMTEXT:中等文本
特点:MEDIUMTEXT 类型用于存储较长的文本数据,其存储容量比 TEXT 类型更大。
长度范围:MEDIUMTEXT 类型可以存储最多 16777215 个字符。
适用场景:适用于存储大型的文本内容,如长篇小说、详细的技术文档等。

# 4. LONGTEXT:长文本
特点:LONGTEXT 类型是 MySQL 中用于存储极长文本数据的类型,能够满足对大量文本数据存储的需求。
长度范围:LONGTEXT 类型可以存储最多 4294967295 个字符,其存储容量非常大。
适用场景:常用于存储超大型的文本数据,如完整的书籍内容、大型的网页数据等。

4. 二进制类型(6)

# 二进制类型:
# 1. BINARY:二进制
特点:BINARY 类型类似于 CHAR 类型,但是它存储的是二进制数据而不是字符数据。在存储时,BINARY 类型会在右侧填充 \0 以达到指定的长度。
长度范围:BINARY 类型的最大长度为 255 字节。
适用场景:适用于存储一些二进制格式的数据,如图像、音频、视频等文件的二进制数据,或者是一些需要以二进制形式存储和比较的加密数据等。

# 2. VARBINARY:
特点:VARBINARY 类型类似于 VARCHAR 类型,它是变长的二进制类型,只占用实际存储二进制数据所需的空间,再加上一个字节或两个字节来记录数据的长度。
长度范围:VARBINARY 类型的最大长度为 65535 字节。
适用场景:适用于存储长度不确定的二进制数据,如不同大小的图像文件、加密后的密码等。

# 3. TINYBLOB:
特点:TINYBLOB 类型用于存储较短的二进制数据,它是一种变长类型,实际存储的长度取决于二进制数据的内容。
长度范围:TINYBLOB 类型可以存储最多 255 个字节的二进制数据。
适用场景:适用于存储一些小型的二进制文件或数据块,如小型图标、短音频片段等。

# 4. BLOB:
特点:BLOB 类型用于存储中等长度的二进制数据,也是变长类型,能够根据实际存储的二进制数据长度动态分配存储空间。
长度范围:BLOB 类型可以存储最多 65535 个字节的二进制数据。
适用场景:常用于存储较大的二进制文件,如普通图像文件、小型视频片段等。

# 5. MEDIUMBLOB:
特点:MEDIUMBLOB 类型用于存储较长的二进制数据,其存储容量比 BLOB 类型更大。
长度范围:MEDIUMBLOB 类型可以存储最多 16777215 个字节的二进制数据。
适用场景:适用于存储大型的二进制文件,如高清图像文件、较长的视频片段等。

# 6. LONGBLOB:
特点:LONGBLOB 类型是 MySQL 中用于存储极长二进制数据的类型,能够满足对大量二进制数据存储的需求。
长度范围:LONGBLOB 类型可以存储最多 4294967295 个字节的二进制数据,其存储容量非常大。
适用场景:常用于存储超大型的二进制数据,如大型视频文件、高分辨率图像等。

11. ENGTH()

# ENGTH() 函数返回一个字符串的长度 (以字节为单位)。
SELECT LENGTH('text');
-- 4

SELECT LENGTH('王');
-- 3

3. 日期类型(5)

# 1. DATE
格式:以 'YYYY-MM-DD' 的格式存储日期值,例如 '2024-11-13'。
范围:从 '1000-01-01''9999-12-31'。
存储字节数:3 个字节。
适用场景:用于存储日期,如出生日期、入职日期、订单日期等,当只需要关注日期部分,不需要时间信息时使用。

# 2. TIME
格式:以 'HH:MM:SS' 的格式存储时间值,例如 '12:30:00'。也可以表示时间间隔,使用格式为 'HHH:MM:SS',其中 'HHH' 表示小时数,范围可以超过 24 小时。
范围:从 '-838:59:59''838:59:59'。
存储字节数:3 个字节。
适用场景:用于存储时间,如会议时间、营业时间等,或者用于表示时间间隔,如某个操作所花费的时间。

# 3. DATETIME
格式:以 'YYYY-MM-DD HH:MM:SS' 的格式存储日期和时间值,例如 '2024-11-13 12:30:00'。
范围:从 '1000-01-01 00:00:00''9999-12-31 23:59:59'。
存储字节数:8 个字节。
适用场景:当需要同时记录日期和时间信息时使用,如事件发生的时间、数据记录的时间戳等。

# 4. TIMESTAMP
格式:以 'YYYY-MM-DD HH:MM:SS' 的格式存储日期和时间值,与 DATETIME 格式相同,例如 '2024-11-13 12:30:00'。
范围:从 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。
存储字节数:4 个字节。
特殊属性:TIMESTAMP 类型的值会根据服务器的时区设置自动进行转换,并且在插入或更新数据时,如果没有指定 TIMESTAMP 列的值,MySQL 会自动将当前的日期和时间插入到该列中。
适用场景:常用于记录数据的最后修改时间、创建时间等,因为它能够自动更新并且占用的存储空间相对较小。

# 5. YEAR
格式:可以使用 4 位数字(YYYY)或 2 位数字(YY)来表示年份。4 位数字的范围是从 19012155,2 位数字的范围是从 7069,表示的年份范围是 19702069。
存储字节数:1 个字节。
适用场景:适用于只需要存储年份信息的场景,如毕业年份、生产年份等。

4. 其他类型(12)

# 1. enum:枚举
ENUM类型允许在创建表时指定一列可以取的值的集合。
例如,定义一个名为gender的列,其类型为ENUM('male', 'female', 'unknown'),则该列只能存储这三个预定义的值中的一个。

# 2. json:JavaScript对象符号
MySQL 以一种高效的二进制格式来存储 JSON 数据,这种格式在存储和检索时能够提供较好的性能。
当插入 JSON 数据时,MySQL 会自动解析并将其转换为内部的二进制表示形式进行存储,在查询时再将其转换回 JSON 格式返回给用户。
JSON 数据在存储时没有固定的长度限制,但实际上会受到 MySQL 的最大行大小限制以及存储引擎的限制。
一般来说,对于 InnoDB 存储引擎,一个行的最大大小约为 65,535 字节,但这并不是绝对的限制,具体取决于存储引擎的配置和其他因素。

# 3. point:点
POINT类型的数据由一对坐标值(X,Y)确定其在二维平面上的位置。
例如,POINT(3.0 4.0)表示坐标为(3.0,4.0)的点。
在 MySQL 中,坐标值可以是整数、小数或其他有效的数值类型。
# 4. multipoint:多点

# 5. linestring:几何线条
LINESTRING用于存储一系列连续的点,这些点按顺序连接形成一条线。
在 MySQL 中,点的坐标通常使用二维平面坐标表示,格式为(x y),其中x表示横坐标,y表示纵坐标。
例如,LINESTRING(0 0, 1 1, 2 2)表示从点(0, 0)开始,经过点(1, 1),到点(2, 2)的一条折线。
# 6. multilinestring:多个几何线条

# 7. polygon:多边形
POLYGON由一系列的点按顺序连接形成一个封闭的环来定义。
这些点的坐标表示了多边形的顶点位置,且最后一个点必须与第一个点相同,以确保多边形的封闭性。
例如,POLYGON((0 0, 0 3, 3 3, 3 0, 0 0))表示一个以点(0, 0)(0, 3)(3, 3)(3, 0)(0, 0)为顶点的矩形。
# 8. multipolygon:多个多边形

# 9. geometry:几何
GEOMETRY是 MySQL 中用于表示几何数据的一种通用数据类型,它是所有几何数据类型的基类。
其他具体的几何数据类型如 POINT点、LINESTRING线、POLYGON多边形 等都可以看作是GEOMETRY类型的子类或特定实现。
# 10. geometrycollection:几何集
GEOMETRYCOLLECTION是一种特殊的几何数据类型,它可以包含多种不同类型的几何对象。
这些几何对象可以是 POINT点、LINESTRING线、POLYGON多边形、MULTIPOINT多点、MULTILINESTRING多行字符串、MULTIPOLYGON多个多边形 等中的任意一种或多种组合。
例如,GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(2 2, 3 3), POLYGON((4 4, 4 6, 6 6, 6 4, 4 4)))就包含了一个点、一条线和一个多边形。

# 11. real
REAL类型是一种用于存储单精度浮点数的数据类型。
REAL类型在 MySQL 中通常使用 4 个字节来存储数据。
它遵循 IEEE 754 标准的单精度浮点数格式,能够表示一定范围内的实数,大约可以提供 7 位有效数字的精度。
其取值范围约为 -3.402823466E+38 到 -1.175494351E-38、0 以及 1.175494351E-38 到 3.402823466E+38。

# 12. set
在创建表时,可以使用SET类型来定义列,其语法为:column_name SET('value1', 'value2', 'value3',...)。
例如,CREATE TABLE my_table (hobbies SET('reading', 'writing', 'painting', 'sports')); 创建了一个名为my_table的表,其中包含一个名为hobbies的SET类型列,它可以存储 'reading''writing''painting''sports' 这几个值中的一个或多个组合。
MySQL 会将SET值存储为一个或多个比特位的组合,每个预定义的值对应一个比特位。
例如,对于上述的hobbies列,如果值为 'reading''sports',则在存储时会将对应 'reading''sports' 的比特位置为 1,其他比特位为 0。这种存储方式非常紧凑,能够有效地节省存储空间。

1. GEOMETRY 对比 GEOMETRYCOLLECTION

对比维度GEOMETRYGEOMETRYCOLLECTION
数据类型通用性是所有几何数据类型的基类,通用性强特定的复杂几何数据类型,用于组合多种几何对象
存储结构复杂度相对较简单,不同几何形状有各自特定存储方式相对复杂,需存储多种几何对象及其类型信息
数据表示灵活性单一几何对象表示,灵活性有限可包含多种几何对象,灵活性高
适用场景适用于表示单一类型的几何对象,如简单的点、线、多边形等适用于表示复杂的几何对象组合或需要整合多种几何数据的场景
空间操作复杂度相对简单,针对单一几何对象操作相对复杂,需遍历集合中的多个几何对象进行操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑士梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值