MySQL 数据类型

2021-04-07 16:09 更新

MySQL 数据类型

MySQL 的数据类型有大概可以分为 5 种,分别是:

  • 整数类型(含:整数类型和浮点数类型)
    • 整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
  • 浮点数类型和定点数类型
    • 浮点数类型包括 FLOAT 和 DOUBLE,定点数类型为 DECIMAL
  • 日期和时间类型
    • YEAR、TIME、DATE、DATETIME 和 TIMESTAMP
  • 字符串类型
    • CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 等
  • 二进制类型
    • BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB

整数类型

MySQL 主要提供的整数类型有 TINYINTSMALLINTMEDIUMINTINTBIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。

类型名称 说明 存储需求
TINYINT 很小的整数 1个字节
SMALLINT 小的整数 2个宇节
MEDIUMINT 中等大小的整数 3个字节
INT (INTEGHR) 普通大小的整数 4个字节
BIGINT 大整数 8个字节

不同的整数类型有不同的取值范围,并且需要不同的存储空间,因此应根据实际需要选择最合适的类型,这样有利于提高查询的效率和节省存储空间。

类型名称 说明 存储需求
TINYINT -128〜127 0 〜255
SMALLINT -32768〜32767 0〜65535
MEDIUMINT -8388608〜8388607 0〜16777215
INT (INTEGER) -2147483648〜2147483647 0〜4294967295
BIGINT -9223372036854775808〜9223372036854775807 0〜18446744073709551615

小数类型

MySQL 中使用浮点数和定点数来表示小数。浮点类型有两种,分别是单精度浮点数( FLOAT)和双精度浮点数( DOUBLE);定点类型只有一种 DECIMAL

浮点类型和定点类型都可以用 (M, D)来表示,其中 M称为精度,表示总共的位数; D称为标度,表示小数的位数。

浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。

类型名称 说明 存储需求
FLOAT 单精度浮点数 4 个字节
DOUBLE 双精度浮点数 8 个字节
DECIMAL (M, D),DEC 压缩的“严格”定点数 M+2 个字节

  • DECIMAL 的存储空间并不是固定的,而由精度值 M 决定,占用 M+2 个字节。
  • 不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。
  • 定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,
  • 两个浮点数进行减法和比较运算时容易出现精度计算问题,尽量避免做浮点数比较。

日期和时间类型

MySQL 中表示日期的数据类型:YEARTIMEDATEDTAETIMETIMESTAMP

类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901 ~ 2155 1 个字节
TIME HH:MM:SS -838:59:59 ~ 838:59:59 3 个字节
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-3 3 个字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 个字节

字符串类型

MySQL 中的字符串类型有 CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXTENUMSET 等。

类型名称 说明 存储需求
CHAR(M) 固定长度非二进制字符串 M 字节,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT 非常小的非二进制字符串 L+1字节,在此,L<2^8
TEXT 小的非二进制字符串 L+2字节,在此,L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此,L<2^24
LONGTEXT 大的非二进制字符串 L+4字节,在此,L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目 (最大值为65535)
SET 一个设置,字符串对象可以有零个或 多个SET成员 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

M表示可以为其指定长度。

CHAR 和 VARCHAR 类型

  • CHAR(M) 为固定长度字符串,定义时指定字符串列长。M 范围 0~255 个字符。存储时,尾部自动填充空格;被检索时,尾部的空格将被删除。
  • VARCHAR(M) 是长度可变的字符串,M 表示最大列的长度,M 范围 0~65535。VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,实际占用的空间为字符串的实际长度加 1。

TEXT 类型

TEXT 类型分为 4 种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。

  • TINYTEXT 表示长度为 255(2^8-1)字符的 TEXT 列。
  • TEXT 表示长度为 65535(2^16-1)字符的 TEXT 列。
  • MEDIUMTEXT 表示长度为 16777215(2^24-1)字符的 TEXT 列。
  • LONGTEXT 表示长度为 4294967295 或 4GB(2^32-1)字符的 TEXT 列。

ENUM 类型

ENUM 是一个字符串对象,值为表创建时列规定中枚举的一列值。

索引
NULL NULL
zero 0
first 1
second 2
third 3

SET 类型

SET 是一个字符串的对象,可以有零或多个值,最多可以有 64 个成员,各成员之间用逗号 ,隔开。列值有重复,自动删除。

二进制类型

MySQL 中的二进制字符串有 BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOBLONGBLOB

类型名称 说明 存储需求
BIT(M) 位字段类型 大约 (M+7)/8 字节
BINARY(M) 固定长度二进制字符串 M 字节
VARBINARY (M) 可变长度二进制字符串 M+1 字节
TINYBLOB (M) 非常小的BLOB L+1 字节,在此,L<2^8
BLOB (M) 小 BLOB L+2 字节,在此,L<2^16
MEDIUMBLOB (M) 中等大小的BLOB L+3 字节,在此,L<2^24
LONGBLOB (M) 非常大的BLOB L+4 字节,在此,L<2^32

M表示指定长度。

BIT 类型

位字段类型。范围为 1~64。

BINARY 和 VARBINARY 类型

BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串。

BLOB 类型

BLOB 是一个二进制的对象,用来存储可变数量的数据。BLOB 类型分为 4 种:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。

数据类型 存储范围
TINYBLOB 最大长度为255 (28-1)字节
BLOB 最大长度为65535 (216-1)字节
MEDIUMBLOB 最大长度为16777215 (224-1)字节
LONGBLOB 最大长度为4294967295或4GB (231-1)字节
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号