数据类型指定特定类型的数据,如整数、浮点数、布尔值等。它还标识该类型的可能值、可以对该类型执行的操作以及该类型值的存储方式。在 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 位以获得双精度。真实是双重的同义词。它需要 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 个字符。 | 这里的 size 是要存储的字符数。固定长度的字符串。右边的空格填充到相等大小的字符。 |
VARCHAR(size) | 它的最大大小为 255 个字符。 | 这里的 size 是要存储的字符数。可变长度字符串。 |
TINYTEXT(size) | 它的最大大小为 255 个字符。 | 这里的 size 是要存储的字符数。 |
TEXT(size) | 最大大小为 65,535 个字符。 | 这里的 size 是要存储的字符数。 |
MEDIUMTEXT(size) | 它的最大大小为 16,777,215 个字符。 | 这里的 size 是要存储的字符数。 |
LONGTEXT(size) | 它的最大大小为 4GB 或 4,294,967,295 个字符。 | 这里的 size 是要存储的字符数。 |
BINARY(size) | 它的最大大小为 255 个字符。 | 这里的 size 是要存储的二进制字符的数量。固定长度的字符串。右边的空格填充到相等大小的字符。 (在 MySQL 4.1.2 中引入) |
VARBINARY(size) | 它的最大大小为 255 个字符。 | 这里的 size 是要存储的字符数。可变长度字符串。 (在 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 | 它是具有一个或多个点值的曲线。如果它只包含两个点,它总是代表 Line。 |
GEOMETRYCOLLECTION | 它是一种具有零个或多个几何值集合的几何。 |
MULTILINESTRING | 它是具有线串值集合的多曲线几何体。 |
MULTIPOINT | 它是多个点元素的集合。在这里,点不能以任何方式连接或排序。 |
MULTIPLYGON | 它是一个多表面对象,表示多个多边形元素的集合。它是一种二维几何。 |
JSON数据类型
MySQL 从 v5.7.8 版本开始支持原生 JSON 数据类型。这种数据类型允许我们快速有效地存储和访问 JSON 文档。与将 JSON 格式的字符串存储在字符串列中相比,JSON 数据类型具有以下优点:
- 它提供 JSON 文档的自动验证。如果我们将无效文档存储在 JSON 列中,则会产生错误。
- 它提供了一种最佳的存储格式。
本站推荐
-
1152
-
1077
-
941
-
937
-
933