一篇文章带你弄懂数据库里面的基础数据类型

数据库的基本数据类型

阅读指南:

这是数据库系列的第二篇文章,感兴趣的读者可以阅读我的有关数据库的合集,一套系统性的基础教程,帮助读者们更全面的学习数据库的相关知识。

合集链接:
数据库详细基本教程

库的数据类型

1.整数类型

SQL的标准整数类型:

类型 存储字节 有符号区间 无符号区间
SMALLINT 2 -2^15~ 2^15-1 0 ~ 2^16
INT(INTEGER) 4 -2^31 ~ 2^31-1 0 ~ 2^32

独属于MySQL的整数类型:

类型 存储字节 有符号区间 无符号区间
TINYINT 1 -2^7~ 2^7-1 0 ~ 2^8
MEDIUMINT 3 -2^23 ~ 2^23-1 0 ~ 2^24
BIGINT 8 -2^63 ~ 2^63-1 0 ~ 2^32

例:

sql 复制代码
stu_age TINYINT unsigned COMMENT '学生年龄,无符号',

注:

无符号的整数类型要添加 unsigned 修饰符。

2.浮点类型

类型 存储字节 M(小数+整数位数) D(小位数)
FLOAT(M, D) 4 M最大为24 D最大为8
DOUBLE(M, D) 8 M最大为53 D最大为30

例:

sql 复制代码
stu_height float(4, 1) unsigned COMMENT '身高,保留一位小数,总共四位数,多位则四舍五入',

注: 现行的MySQL并不推荐使用这两种方法,未来版本可能会取消对他的支持。在如今的话,对于数据要求的精度并不是过高的话,可以使用。

3.定点数类型

类型 存储字节 M(小数+整数位数) D(小位数)
DECIMAL(M, D) 动态计算 M最大为65 D最大为30

例:

sql 复制代码
emp_salary DECIMAL(8, 1) COMMENT '工资,保留一位小数,总共八位数,多位则四舍五入',

注:

DECIMAL类型的存储空间是可变的,他的存储大小受DECIMAL数据类型定义是指定的精度和规模影响度。如果D为0,则DECIMAL定义的值不包含小数部分。

4.字符串类型

字符串 特点 长度 长度范围(字符) 存储空间
CHAR(M) 固定长度 M 0<= M <= 255 M * 4 个字节
VARCHAR(M) 可变长度 M 最多为2^16 - 1 M * 4 +1 个字节

注:

CHAR类型:

  • 一般需要提前定义字符串长度,如果不指定M,则默认是1个字符。

  • 保存数据时,若声明的字符串长度大于实际字符串长度,会在右边补空格。

  • 当MySQL检索数据时,会自动去掉CHAR类型的数据的尾部空格。

VARCHAR类型:

  • 定义时必须指定M,否则报错。
  • 在MySQL5.0版本以上,VARCHAR(20) 指的是20个字符。
  • 当MySQL检索数据时,会保留VARCHAR类型的数据的尾部的空格。

当存储对象较大时,则考虑将字符串类型转为文本类型数据来存储。

5.文本类型

文本字符串类型 特点 长度 长度范围(字符) 存储空间
TINYTEXT 小文本,可变长度 L 0<= M <= 255 L + 2 个字节
TEXT 文本,可变长度 L 0<= M <= 2^16 − 1 L + 2 个字节
MEDIUMTEXT 中等文本,可变长度 L 0<= M <= 2^24 - 1 L + 3 个字节
LONGTEXT 大文本,可变长度 L 0<= M <= 2^32 - 1 L + 4 个字节

例:

sql 复制代码
CREATE TABLE 表名{
	tx TEXT
}

注:

  • 短文本,固定长度使用char,例如:性别,手机号;

  • 短文本,非固定长度使用VARCHAR,例如:姓名,地址;

  • 大文本,建议存储到文本文件,使用VARCHAR记录文件地址,不使用TEXT直接存储大文本,这很耗性能。

6.时间类型

类型 名称 字节 日期格式 小值 最大值
YEAR 1 YYYY或YY 1901 2155
TIME 时间 3 HH:MM:SS -838:59:59 838:59:59
DATE 日期 3 YYYY-MM-DD 1000-01-01 9999-12-03
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:00 2038-01-19 03:14:07

在对使用DATATIME和TIMESTAMP类型是,可以让他自动初始化和更新:

sql 复制代码
# 方式一: 插入默认当前时间和修改自动更新当前时间
ts TIEMSTAMP DEFAULT CURENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,	# 添加约束
dt DATETIME CRRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

# 方法二: 插入默认当前时间
ts TIEMSTAMP DEFAULT CURENT_TIMESTAMP,
dt DATETIME DEFAULT CURENT_TIMESTAMP,
相关推荐
oak隔壁找我2 小时前
MySQL中 SHOW FULL PROCESSLIST` 输出中 `State` 列的所有可能值
后端
上进小菜猪3 小时前
基于 YOLOv8 的面向文档智能处理的表格区域检测系统 [目标检测完整源码]
后端
oak隔壁找我3 小时前
JVM常用调优参数
java·后端
IT_陈寒6 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
晨星shine7 小时前
GC、Dispose、Unmanaged Resource 和 Managed Resource
后端·c#
蝎子莱莱爱打怪7 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
NineData7 小时前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
倚栏听风雨8 小时前
【ES避坑指南】明明存的是 "CodingAddress",为什么 term 查询死活查不到?彻底搞懂 text 和 keyword
后端
程序员爱钓鱼8 小时前
Go 操作 Windows COM 自动化实战:深入解析 go-ole
后端·go·排序算法
回家路上绕了弯8 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端