菜鸟笔记
提升您的技术认知

MySQL 数据类型

阅读 : 111

数据类型指定了特定的数据类型,例如整数,浮点数,布尔值等。它还标识了该类型的可能值,操作可以在该类型上执行的操作以及该类型的值的存储方式。在MySQL中,每个数据库表都有许多列,并且每个列包含特定的数据类型。

我们可以确定MySQL中具有以下特征的数据类型:

  • 它代表的值的类型(固定或可变)。
  • 它占用的存储空间取决于这些值是固定长度还是可变长度。
  • 其值可以建立索引或不建立索引。
  • MySQL如何执行特定数据类型的值的比较。

MySQL支持各种类别中的许多 SQL 标准数据类型。它使用许多不同的数据类型,这些数据类型可以分为以下几类: 数字,日期和时间,字符串类型,空间类型和 JSON 数据类型。

MySQL 中,数据类型用于定义表中列的属性。选择合适的数据类型对存储效率和查询性能至关重要。MySQL 提供了多种数据类型,主要分为以下几类:


1. 数值类型

MySQL 数值类型用于存储整数、小数和浮点数。

1.1 整数类型

数据类型 存储大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 -128 ~ 127 0 ~ 255 小范围的整数值
SMALLINT 2 字节 -32,768 ~ 32,767 0 ~ 65,535 中等范围的整数值
MEDIUMINT 3 字节 -8,388,608 ~ 8,388,607 0 ~ 16,777,215 较大的整数值
INTINTEGER 4 字节 -2,147,483,648 ~ 2,147,483,647 0 ~ 4,294,967,295 常用的整数类型
BIGINT 8 字节 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615 超大范围的整数值
  • UNSIGNED 修饰符:
    • 如果列声明为 UNSIGNED,则只能存储非负数,范围从 0 到最大正值。
    • 例如:TINYINT UNSIGNED 的范围是 0 ~ 255

1.2 小数和浮点类型

数据类型 存储大小 范围 精度 用途
DECIMAL(M,D)NUMERIC(M,D) 依赖定义(每个数字占 1 字节) -10^M ~ 10^M(M 是总位数,D 是小数位数) 精确到小数点后 D 位 精确存储小数(如财务数据)
FLOAT(M,D) 4 字节 -3.402823466E+38 ~ 3.402823466E+38 精度较低(约 7 位有效数字) 存储较小范围的浮点数
DOUBLE(M,D)REAL 8 字节 -1.7976931348623157E+308 ~ 1.7976931348623157E+308 精度较高(约 15-16 位有效数字) 存储较大范围的浮点数
  • 区别:
    • DECIMAL 是定点数,存储为字符串,不会有精度损失,适合财务数据等场景。
    • FLOATDOUBLE 是近似值存储,可能会有精度损失。

2. 日期和时间类型

MySQL 提供多种日期和时间类型,用于存储日期、时间或两者的组合。

数据类型 存储大小 格式 范围 用途
DATE 3 字节 YYYY-MM-DD 1000-01-01 ~ 9999-12-31 存储日期(不包含时间)
DATETIME 8 字节 YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 存储日期和时间
TIMESTAMP 4 字节 YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC 存储 Unix 时间戳,受时区影响
TIME 3 字节 HH:MM:SS -838:59:59 ~ 838:59:59 存储时间(不包含日期)
YEAR 1 字节 YYYY 1901 ~ 2155 存储年份
  • 区别:
    • DATETIME 是固定格式,不受时区影响。
    • TIMESTAMP 会根据服务器或会话的时区自动调整。

3. 字符串类型

MySQL 提供多种字符串类型,支持存储文本、二进制数据等。

3.1 字符串类型

数据类型 存储大小 最大长度 描述
CHAR(M) 固定长度(M 字符,每字符 1 字节) 0 ~ 255 字符 固定长度字符串(不足部分用空格填充)。
VARCHAR(M) 实际长度 + 1 或 2 字节 0 ~ 65,535 字节 可变长度字符串,推荐用于变长文本。
TEXT 实际长度 + 2 字节 0 ~ 65,535 字节 存储大文本数据,按大小分为以下几种:

TEXT 类型子分类

类型 最大长度
TINYTEXT 255 字节
TEXT 65,535 字节
MEDIUMTEXT 16,777,215 字节
LONGTEXT 4,294,967,295 字节

3.2 二进制字符串类型

数据类型 存储大小 最大长度 描述
BINARY(M) 固定长度(M 字节) 0 ~ 255 字节 固定长度二进制数据。
VARBINARY(M) 实际长度 + 1 或 2 字节 0 ~ 65,535 字节 可变长度二进制数据。
BLOB 实际长度 + 2 字节 0 ~ 65,535 字节 存储二进制大对象,按大小分为以下几种:

BLOB 类型子分类

类型 最大长度
TINYBLOB 255 字节
BLOB 65,535 字节
MEDIUMBLOB 16,777,215 字节
LONGBLOB 4,294,967,295 字节

4. 枚举和集合类型

数据类型 描述
ENUM 枚举类型,允许从预定义的一组字符串值中选择一个值。例如:ENUM('small', 'medium', 'large')
SET 集合类型,允许从预定义的一组字符串值中选择一个或多个值。例如:SET('a', 'b', 'c', 'd')
  • 区别:
    • ENUM 每次只能选择一个值。
    • SET 可以选择多个值。

5. JSON 类型

数据类型 描述
JSON 存储 JSON 格式的文档,用于结构化或半结构化数据的存储。
  • 特点
    • 支持 JSON 数据的验证。
    • 提供 JSON 操作函数(如 JSON_EXTRACT())。

6. 数据类型选择建议

  1. 数值类型
    • 优先选择能满足需求的最小整数类型(如 TINYINTINT 等),以节约存储空间。
    • 财务数据建议使用 DECIMAL 以避免浮点数精度问题。
  2. 日期和时间类型
    • 如果只存储日期,选择 DATE
    • 如果需要存储时间戳并自动调整时区,选择 TIMESTAMP
  3. 字符串类型
    • 短文本使用 VARCHAR
    • 长文本(如文章内容)使用 TEXT
    • 二进制数据(如图片、文件)使用 BLOB
  4. JSON 类型
    • 如果需要存储灵活的结构化数据,可使用 JSON

通过合理选择数据类型,可以优化存储效率和查询性能!