一、数值类型

1. 整数类型

数据类型 范围(有符号) 无符号范围 存储空间 示例场景
TINYINT -128 ~ 127 0 ~ 255 1字节 年龄、状态码(如0/1)
SMALLINT -32768 ~ 32767 0 ~ 65535 2字节 小规模计数(如班级人数)
MEDIUMINT -8388608 ~ 8388607 0 ~ 16777215 3字节 中等范围ID
INT (INTEGER) -2147483648 ~ 2147483647 0 ~ 4294967295 4字节 用户ID、订单号
BIGINT -2^63 ~ 2^63-1 0 ~ 2^64-1 8字节 大型系统的主键、时间戳

注意

  • 若字段不需要负数,可加 UNSIGNED 关键字扩大范围(如 INT UNSIGNED)。
  • 主键推荐用 INTBIGINT(结合 AUTO_INCREMENT)。

2. 浮点与精确小数

数据类型 说明 示例场景
FLOAT(M,D) 单精度浮点数,M是总位数,D是小数位 科学测量(可接受近似值)
DOUBLE(M,D) 双精度浮点数,精度更高 高精度科学计算
DECIMAL(M,D) 精确小数,M是总位数,D是小数位 金额、需要精确计算的场景

示例

1
2
-- 金额字段(精确到分)
price DECIMAL(10, 2) -- 最大存储 99999999.99

二、字符串类型

1. 短文本

数据类型 说明 示例场景
CHAR(n) 定长字符串,最多255字符 固定长度(如国家代码)
VARCHAR(n) 变长字符串,最多65535字符 姓名、地址等可变长度

区别

  • CHAR(10):存储 “abc” 时占用10字节(补空格)。
  • VARCHAR(10):存储 “abc” 时占用3字节 + 长度信息。

2. 长文本

数据类型 说明
TEXT 存储长文本(如文章内容),最大65KB
MEDIUMTEXT 最大16MB
LONGTEXT 最大4GB

3. 二进制数据

数据类型 说明
BLOB 存储二进制数据(如图片、文件)
LONGBLOB 最大4GB

三、日期与时间类型

数据类型 格式 示例场景
DATE YYYY-MM-DD 生日、订单日期
TIME HH:MM:SS 会议时间
DATETIME YYYY-MM-DD HH:MM:SS 订单创建时间(带时分秒)
TIMESTAMP 时间戳(1970-01-01至今的秒数) 自动记录修改时间
YEAR YYYY 毕业年份

区别

  • DATETIME:范围1000-01-01 到 9999-12-31,手动插入或更新。
  • TIMESTAMP:范围1970-01-01 到 2038-01-19,自动时区转换。

四、其他类型

数据类型 说明 示例场景
ENUM('val1', 'val2') 枚举类型,只能选列表中的值 性别(’男’,’女’)
SET('a','b','c') 集合类型,可选多个值 用户兴趣标签
BOOLEAN 别名是 TINYINT(1),0为假,非0为真 是否启用(TRUE/FALSE)

五、如何选择数据类型?

  1. 最小化原则:选择能满足需求的最小类型(如年龄用 TINYINT 而非 INT)。
  2. 精确性:金额用 DECIMAL,避免浮点误差。
  3. 可读性:日期用 DATE/DATETIME,而非字符串。
  4. 性能优化
    • 频繁查询的字段避免用 TEXT/BLOB
    • 定长字段(如MD5哈希值)用 CHAR

六、示例建表语句

1
2
3
4
5
6
7
8
9
CREATE TABLE products (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) COMMENT '商品价格',
stock INT UNSIGNED DEFAULT 0 COMMENT '库存',
description TEXT COMMENT '商品描述',
status ENUM('active', 'inactive') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);