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
相关推荐
AllData公司负责人2 小时前
AI大模型数据开发底座系列说明书,AllData集成Chat2DB开源项目建设AI 数据库分析底座,涵盖AI 洞察/对话SQL/智能视图!
数据库·人工智能·sql·开源·ai 洞察·对话sql
xixingzhe23 小时前
数据库备份的分类与特点
数据库
时间的拾荒人6 小时前
Redis 主从复制详解:配置实操 + 原理机制
数据库·redis·面试
隔窗听雨眠7 小时前
MySQL三表JOIN执行内核与优化器决策机制
数据库·mysql·sql优化
Decay__8 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
笃行3509 小时前
【金仓数据库产品体验官】订单增量同步实战:MERGE、OUTPUT 与 IDENTITY 的兼容验证
数据库
星恒随风12 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无奈笑天下13 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
xiaoye-duck15 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
AllData公司负责人15 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析