数据类型指定特定类型的数据,如整数、浮点数、布尔值等。它还标识该类型的可能值、可以对该类型执行的操作以及该类型值的存储方式. 在 MySQL 中,每个数据库表都有许多列,并且每列都包含特定的数据类型。
我们可以通过以下特征来确定 MySQL 中的数据类型:
- 它代表的值的类型(固定的或可变的)。
- 它占用的存储空间取决于值是固定长度还是可变长度。
- 它的值可以被索引也可以不被索引。
- MySQL 如何执行特定数据类型的值的比较。
MySQL 支持各种类别的大量SQL标准数据类型。它使用许多不同的数据类型,可以分为以下几类:数字、日期和时间、字符串类型、空间类型和JSON数据类型。
数字数据类型
MySQL 具有所有基本的 SQL 数字数据类型。这些数据类型可以包括精确数值数据类型(例如,整数、小数、数值等)以及近似数值数据类型(例如,浮点数、实数和双精度数)。它还支持 BIT 数据类型来存储位值。在 MySQL 中,除位数据类型外,数字数据类型分为有符号或无符号两种类型。
下表包含MySQL支持的所有数字数据类型:
数据类型语法 | 描述 |
---|---|
TINYINT | 它是一个可以有符号或无符号的非常小的整数。如果有符号,则允许范围为 -128 到 127。如果无符号,则允许范围为 0 到 255。我们可以指定最多 4 位的宽度。需要 1 个字节来存储。 |
SMALLINT | 它是一个可以有符号或无符号的小整数。如果有符号,允许的范围是-32768 到 32767。如果没有符号,允许的范围是从 0 到 65535。我们可以指定最多 5 位的宽度。它需要 2 个字节用于存储。 |
MEDIUMINT | 它是一个中等大小的整数,可以有符号或无符号。如果有符号,则允许的范围是从 -8388608 到 8388607。如果是无符号,则允许的范围是从 0 到 16777215。我们可以指定最多 9 位的宽度。它需要 3 个字节用于存储。 |
INT | 它是一个可以有符号或无符号的正常大小的整数。如果有符号,则允许的范围是从 -2147483648 到 2147483647。如果是无符号,则允许的范围是从 0 到 4294967295。我们可以指定最多 11 位的宽度。它需要 4 个字节用于存储。 |
BIGINT | 它是一个可以有符号或无符号的大整数。如果有符号,则允许范围为 -9223372036854775808 到 9223372036854775807。如果无符号,则允许范围为 0 到 18446744073709551615。我们可以指定最多 20 位的宽度。它需要 8 个字节用于存储。 |
FLOAT(m,d) | 它是一个不能无符号的浮点数。您可以定义显示长度 (m) 和小数位数 (d)。这不是必需的,默认为 10,2,其中 2 是小数位数,10 是总位数(包括小数)。对于浮点类型,十进制精度可以达到 24 位。它需要 2 个字节用于存储。 |
DOUBLE(m,d) | 它是一个不能无符号的双精度浮点数。您可以定义显示长度 (m) 和小数位数 (d)。这不是必需的,默认为 16,4,其中 4 是小数位数。十进制精度可以达到 53 位双精度。Real 是 double 的同义词。它需要 8 个字节用于存储。 |
DECIMAL(m,d) | 不能无符号的解压缩浮点数。在未压缩的十进制中,每个十进制对应一个字节。需要定义显示长度 (m) 和小数位数 (d)。数字是十进制的同义词。 |
BIT(m) | 它用于将位值存储到表列中。这里,M 确定每个值的位数,范围为 1 到 64。 |
BOOL | 它仅用于真假条件。它认为数值 1 为真,0 为假。 |
BOOLEAN | 它类似于 BOOL。 |
日期和时间数据类型:
此数据类型用于表示时间值,例如日期、时间、日期时间、时间戳和年份。每个时间类型都包含值,包括零。当我们插入无效值时,MySQL 无法表示它,然后使用零值。
下表说明了 MySQL 中支持的所有日期和时间数据类型:
数据类型语法 | 最大尺寸 | 解释 |
---|---|---|
YEAR[(2|4)] | 年份值为 2 位或 4 位。 | 默认值为 4 位。需要 1 个字节来存储。 |
DATE | 值范围从“1000-01-01”到“9999-12-31”。 | 显示为“yyyy-mm-dd”。存储需要 3 个字节。 |
TIME | 值范围从“-838:59:59”到“838:59:59”。 | 显示为“HH:MM:SS”。存储需要 3 个字节加上小数秒。 |
DATETIME | 值范围从“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。 | 显示为“yyyy-mm-dd hh:mm:ss”。存储需要 5 个字节加上小数秒。 |
TIMESTAMP(m) | 值范围从 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' TC。 | 显示为“YYYY-MM-DD HH:MM:SS”。存储需要 4 个字节加上小数秒。 |
字符串数据类型:
字符串数据类型用于保存纯文本和二进制数据,例如文件、图像等。MySQL 可以根据模式匹配(如 LIKE 运算符、正则表达式等)进行字符串值的搜索和比较。
下表说明了 MySQL 中支持的所有字符串数据类型:
数据类型语法 | 最大尺寸 | 解释 |
---|---|---|
CHAR(size) | 它的最大大小为 255 个字符。 | 这里的大小是要存储的字符数。定长字符串。在右侧填充空格以达到相同大小的字符。 |
VARCHAR(size) | 它的最大大小为 255 个字符。 | 这里的大小是要存储的字符数。变长字符串。 |
TINYTEXT(大小) | 它的最大大小为 255 个字符。 | 这里的大小是要存储的字符数。 |
TEXT(size) | 最大大小为 65,535 个字符。 | 这里的大小是要存储的字符数。 |
MEDIUMTEXT(size) | 它的最大大小为 16,777,215 个字符。 | 这里的大小是要存储的字符数。 |
LONGTEXT(size) | 它的最大大小为 4GB 或 4,294,967,295 个字符。 | 这里的大小是要存储的字符数。 |
BINARY(size) | 它的最大大小为 255 个字符。 | 这里的大小是要存储的二进制字符数。定长字符串。在右侧填充空格以达到相同大小的字符。 (在 MySQL 4.1.2 中引入) |
VARBINARY(size) | 它的最大大小为 255 个字符。 | 这里的大小是要存储的字符数。变长字符串。 (在 MySQL 4.1.2 中引入) |
ENUM | 它需要 1 或 2 个字节,具体取决于枚举值的数量。一个 ENUM 最多可以有 65,535 个值。 | 它是枚举的缩写,这意味着每一列可能具有指定的可能值之一。它使用数字索引(1、2、3…)来表示字符串值。 |
SET | 它需要 1、2、3、4 或 8 个字节,具体取决于集合成员的数量。它最多可以存储 64 个成员。 | 它可以保存零个或多个,或任意数量的字符串值。它们必须从表创建期间指定的预定义值列表中选择。 |
二进制大对象数据类型 (BLOB):
MySQL 中的 BLOB 是一种数据类型,可以容纳可变数量的数据。它们根据值可以容纳的最大长度分为四种不同的类型。
下表显示了 MySQL 中支持的所有二进制大对象数据类型:
数据类型语法 | 最大尺寸 |
---|---|
TINYBLOB | 它最多可以容纳 255 个字节。 |
BLOB(size) | 它可以容纳 65,535 字节的最大大小。 |
MEDIUMBLOB | 它可以容纳的最大大小为 16,777,215 字节。 |
LONGBLOB | 它可以容纳 4gb 或 4,294,967,295 字节的最大大小。 |
空间数据类型
它是一种特殊的数据类型,用于保存各种几何和地理值。它对应于 OpenGIS 类。下表显示了 MySQL 中支持的所有空间类型:
数据类型 | 说明 |
---|---|
GEOMETRY | 它是一个点或点的集合,可以保存具有位置的任何类型的空间值。 |
POINT | 几何中的一个点代表一个位置。它存储 X、Y 坐标的值。 |
POLYGON | 它是一个表示多边几何的平面。它可以由零个或多个内部边界和仅一个外部边界定义。 |
LINESTRING | 它是具有一个或多个点值的曲线。如果它只包含两个点,它总是代表线。 |
GEOMETRYCOLLECTION | 它是一种具有零个或多个几何值集合的几何。 |
MULTILINESTRING | 它是一个多曲线几何体,具有一组线串值。 |
MULTIPOINT | 它是多个点元素的集合。在这里,该点不能以任何方式连接或排序。 |
MULTIPLYGON | 它是一个多表面对象,表示多个多边形元素的集合。它是一种二维几何。 |
JSON 数据类型
MySQL 从 v5.7.8 版本开始提供对原生 JSON 数据类型的支持。这种数据类型允许我们快速有效地存储和访问 JSON 文档。
与将 JSON 格式的字符串存储在字符串列中相比,JSON 数据类型具有以下优点:
- 它提供了 JSON 文档的自动验证。如果我们在 JSON 列中存储无效文档,则会产生错误。
- 它提供了最佳的存储格式。