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
相关推荐
2301_764150561 小时前
JavaScript中预取Prefetch与预加载Preload策略
jvm·数据库·python
aXin_ya1 小时前
微服务 第二天
java·数据库·微服务
Polar__Star1 小时前
如何在画中画(PiP)模式下动态切换视频源
jvm·数据库·python
希望永不加班1 小时前
Spring AOP 核心概念:切面、通知、切点、织入
java·数据库·后端·mysql·spring
山峰哥1 小时前
SQL查询优化实战:从Explain分析到索引策略的深度解析
数据库·oracle
X1A0RAN2 小时前
容器化部署elasticsearch教程+python操作es数据库示例
数据库·python·elasticsearch
weixin_580614002 小时前
Go语言怎么优化goroutine_Go语言goroutine优化教程【基础】
jvm·数据库·python
qq_189807032 小时前
mysql如何查看所有数据库用户_mysql用户查询管理命令
jvm·数据库·python
それども2 小时前
MySQL IN和NOT IN的效率对比,该用哪一个
数据库·mysql