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格式字符串,具有以下优势:
- 它提供自动验证JSON文档的功能。如果我们在JSON列中存储无效的文档,将会产生错误。
- 它提供了一种最佳的存储格式。