数据类型指定了特定的数据类型,例如整数,浮点数,布尔值等。它还标识了该类型的可能值,操作可以在该类型上执行的操作以及该类型的值的存储方式。在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 |
较大的整数值 |
int 或 integer |
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
是定点数,存储为字符串,不会有精度损失,适合财务数据等场景。
float
和 double
是近似值存储,可能会有精度损失。
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. 数据类型选择建议
- 数值类型:
- 优先选择能满足需求的最小整数类型(如
tinyint
、int
等),以节约存储空间。
- 财务数据建议使用
decimal
以避免浮点数精度问题。
- 日期和时间类型:
- 如果只存储日期,选择
date
。
- 如果需要存储时间戳并自动调整时区,选择
timestamp
。
- 字符串类型:
- 短文本使用
varchar
。
- 长文本(如文章内容)使用
text
。
- 二进制数据(如图片、文件)使用
blob
。
- json 类型:
通过合理选择数据类型,可以优化存储效率和查询性能!