MySQL 数据类型

2024年03月25日 MySQL 数据类型 极客笔记

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)是必需的。Numeric是decimal的同义词。
BIT(m) 它用于将位值存储到表列中。这里,M确定每个值的位数,范围为1到64。
BOOL 它仅用于true和false条件。它将数值1视为true,将数值0视为false。
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):

BLOB在MySQL中是一种可以容纳可变数量数据的数据类型。根据其可以容纳的值的最大长度,它们被分为四种不同类型。

下表显示了在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 它是具有一组linestring值的多曲线几何。
MULTIPOINT 它是多个点元素的集合。在此,点不能以任何方式连接或排序。
MULTIPLYGON 它是表示多个多边形元素集合的多面对象。它是二维几何的一种类型。

JSON数据类型

MySQL v5.7.8版本起提供对本地JSON数据类型的支持。此数据类型允许我们快速高效地存储和访问JSON文档。

JSON数据类型相比于使用字符串列存储JSON格式字符串,具有以下优势:

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

本文链接:http://so.lmcjl.com/news/322/

展开阅读全文