MySQL 数据类型

数据类型指定特定类型的数据,如整数、浮点数、布尔值等。它还标识该类型的可能值、可以对该类型执行的操作以及该类型值的存储方式。在 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 数据类型具有以下优点:

  1. 它提供 JSON 文档的自动验证。如果我们将无效文档存储在 JSON 列中,则会产生错误。
  2. 它提供了一种最佳的存储格式。

热门文章

优秀文章