程序员社区

MySQL系列教程 --- 3、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 位双精度。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 数据类型具有以下优点:

  1. 它提供了 JSON 文档的自动验证。如果我们在 JSON 列中存储无效文档,则会产生错误。
  2. 它提供了最佳的存储格式。
赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 3、MySQL的数据类型

一个分享Java & Python知识的社区