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

mysql 数据类型-ag真人官方网

阅读 : 195

数据类型指定了特定的数据类型,例如整数,浮点数,布尔值等。它还标识了该类型的可能值,操作可以在该类型上执行的操作以及该类型的值的存储方式。在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

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

网站地图