MySQL--数据类型

数值类型

有符号整数

类型 字节 最小值 最大值 说明
TINYINT 1 -128 127 微小整数
SMALLINT 2 -32768 32767 小整数
MEDIUMINT 3 -8388608 8388607 中等整数
INT/INTEGER 4 -2147483648 2147483647 标准整数
BIGINT 8 -2^63 2^63-1 大整数

无符号整数

类型 字节 最小值 最大值
TINYINT UNSIGNED 1 0 255
SMALLINT UNSIGNED 2 0 65535
MEDIUMINT UNSIGNED 3 0 16777215
INT UNSIGNED 4 0 4294967295
BIGINT UNSIGNED 8 0 2^64-1

注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不 下,与其如此,还不如设计时,将int类型提升为bigint类型。

示例

复制代码
-- 有符号整数
age TINYINT,           -- -128 到 127
user_id INT,          -- 普通用户ID
price INT,            -- 价格(分)

-- 无符号整数
age TINYINT UNSIGNED, -- 0 到 255
post_id BIGINT UNSIGNED, -- 大范围ID
views INT UNSIGNED,   -- 访问量,不会为负

浮点类型

浮点数

类型 字节 精度 说明
FLOAT 4 单精度 约 7 位有效数字
DOUBLE 8 双精度 约 15 位有效数字

定点数

类型 说明 格式
DECIMAL 精确小数 DECIMAL(M, D)
NUMERIC DECIMAL 的别名 同 DECIMAL

参数说明

M:总位数(精度),1-65

D:小数位数,0-30

字符串类型

类型 最大长度 说明 存储方式
CHAR 255 字符 定长字符串 固定长度
VARCHAR 65535 字节 变长字符串 实际长度 + 1/2 字节
BINARY 255 字节 定长二进制 二进制数据
VARBINARY 65535 字节 变长二进制 二进制数据

bit类型

复制代码
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

枚举和集合

ENUM类型

复制代码
-- 枚举:单选
status ENUM('active', 'inactive', 'pending'),
gender ENUM('M', 'F', 'U'),  -- Male/Female/Unknown
priority ENUM('low', 'medium', 'high', 'critical')

-- 存储为数字索引(1开始)
-- 查询时可用字符串或数字
SELECT * FROM table WHERE status = 'active';
SELECT * FROM table WHERE status = 1;  -- 等效

SET类型

复制代码
-- 集合:多选(最多64个值)
tags SET('news', 'tech', 'sports', 'entertainment'),
permissions SET('read', 'write', 'delete', 'admin')

-- 使用示例
INSERT INTO posts (tags) VALUES ('news,tech');
INSERT INTO users (permissions) VALUES ('read,write');

-- 查询包含某个值
SELECT * FROM posts WHERE FIND_IN_SET('news', tags) > 0;
SELECT * FROM users WHERE permissions LIKE '%read%';

集合查询使用find_ in_ set函数: find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0;str_list 用逗号分隔的字符串。

示例

复制代码
 select find_in_set('a', 'a,b,c');
 select * from votes where find_in_set('登山', hobby);

日期时间类型

类型 格式 范围 字节 说明
DATE YYYY-MM-DD 1000-01-01 到 9999-12-31 3 日期
TIME HH:MM:SS[.fraction] -838:59:59 到 838:59:59 3 时间
DATETIME YYYY-MM-DD HH:MM:SS[.fraction] 1000-01-01 00:00:00 到 9999-12-31 23:59:59 8 日期时间
TIMESTAMP YYYY-MM-DD HH:MM:SS[.fraction] 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC 4 时间戳
YEAR YYYY 1901 到 2155 1 年份

示例

复制代码
-- 日期时间字段
birth_date DATE,                     -- 生日
meeting_time TIME,                   -- 会议时间
created_at DATETIME,                 -- 创建时间(不会自动更新)
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
published_year YEAR,                 -- 出版年份

-- 带小数秒的精度
log_time DATETIME(6),                -- 微秒精度
transaction_time TIMESTAMP(3)        -- 毫秒精度

总结

数据类型 推荐用途 示例
TINYINT 状态、标志位 status TINYINT(1)
INT ID、计数 id INT UNSIGNED
BIGINT 大数字 ID order_id BIGINT UNSIGNED
DECIMAL 金额、精确计算 price DECIMAL(10,2)
VARCHAR 变长字符串 name VARCHAR(50)
CHAR 定长编码 uuid CHAR(36)
TEXT 长文本 content TEXT
DATETIME 时间记录 created_at DATETIME
TIMESTAMP 更新时间 updated_at TIMESTAMP
JSON 结构化数据 attributes JSON
BOOLEAN 布尔值 is_active BOOLEAN
相关推荐
●VON6 小时前
鸿蒙Flutter实战:分类管理页BottomSheet CRUD
数据库·flutter·华为·harmonyos·鸿蒙
Cosolar7 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
企服AI产品测评局8 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?
运维·数据库·人工智能·ai·chatgpt·自动化
cfm_29148 小时前
Redis数据安全性解析
数据库·redis·缓存
DIY源码阁8 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
NiceCloud喜云10 小时前
Claude Code Routines 实战:三种触发器跑通云端自动化编码
android·运维·数据库·人工智能·自动化·json·飞书
辞忧九千七10 小时前
Redis 单机一主二从主从复制完整搭建指南
数据库·redis·缓存
lzhdim10 小时前
SQL 入门 16:SQL 事务隔离级别与死锁解析(易懂)
数据库·sql
AI 小老六11 小时前
Claude Code 如何压缩上下文:Microcompact、Prompt Cache 与 cache_edits 工程拆解
数据库·人工智能·ai·语言模型·架构·系统架构
Chasing__Dreams11 小时前
Redis--基础知识点--32--redis底层存储结构
数据库·redis·缓存