mysql菜鸟教程
4.3 数据类型详解:整数、小数、文本、日期等
在MySQL中,数据类型定义了表中每个列可以存储的数据种类,如数字、字符串、日期等。它为每列数据预先设定好“形状”和“大小”,是确保数据正确、高效和节省空间存储的基石。选错类型,可能导致数据错误、性能低下或存储浪费。
下面我们来深入认识每一个核心数据类型。
一、数值类型
1. 整数类型
用于存储没有小数部分的数字,如年龄、数量、ID等。
使用示例:
CREATE TABLE users ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, -- 无符号自增主键 age TINYINT UNSIGNED, -- 年龄,不会为负 status TINYINT DEFAULT 1 -- 状态,默认1(激活) );
2. 小数(浮点数 & 定点数)类型
用于存储带小数部分的数字,如价格、评分、科学计数。
参数解释:
M:总位数(精度),包括整数位和小数位。
D:小数位数(标度)。
使用示例:
CREATE TABLE products ( price DECIMAL(10, 2), -- 价格,精确到分,例如 99999999.99 rating FLOAT(3, 1), -- 评分,如 4.5,允许轻微误差 weight DOUBLE(8, 3) -- 重量,如 12.345 );
二、文本与字符串类型
用于存储非数字的字符数据。
1. 基本字符串类型
CHAR vs VARCHAR 选择:若数据长度几乎不变(如身份证号18位),选CHAR;若长度变化大(如姓名2-4个字),选VARCHAR。在MySQL中,VARCHAR更为常用。
2. 文本类型
用于存储大段文本。
使用示例:
CREATE TABLE articles ( title VARCHAR(200), -- 标题,变长字符串 summary TINYTEXT, -- 摘要,短文本 content TEXT, -- 正文,长文本 full_content LONGTEXT -- 完整内容,超长文本 );
3. 枚举与集合类型
用于限定字段值在一个预定义的列表中选择。
使用示例与注意:
CREATE TABLE members (
gender ENUM('男', '女', '其他'), -- 性别,三选一
hobbies SET('读书', '游戏', '旅游', '健身') -- 爱好,可多选
);
-- 插入数据
INSERT INTO members (gender, hobbies) VALUES ('男', '读书,旅游');注意:ENUM和SET在数据库设计中需谨慎使用,因为它们不易维护(修改选项需改表结构),且可移植性较差。有时用关联表或VARCHAR加检查约束可能是更灵活的选择。
三、日期与时间类型
用于存储日期、时间或组合。
使用示例:
CREATE TABLE events ( event_date DATE, -- 活动日期 start_time TIME, -- 开始时间 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间(固定) updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间(自动) );
四、其他类型
JSON (MySQL 5.7+): 用于存储半结构化的JSON文档,便于灵活扩展。
二进制类型 (BINARY, VARBINARY, BLOB): 类似CHAR/VARCHAR/TEXT,但存储的是二进制字节流,如图片、音频等文件的二进制数据,通常不建议直接存数据库,而是存储文件路径。
综合运用以上知识,我们来设计一个简化的博客文章表:
CREATE TABLE blog_posts (
-- 数值类型:ID和计数
post_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
view_count INT UNSIGNED DEFAULT 0,
-- 字符串类型:标题、摘要、内容
title VARCHAR(255) NOT NULL,
summary VARCHAR(500),
content TEXT NOT NULL,
-- 日期时间类型:发布时间和更新时间
publish_time DATETIME,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-- 枚举类型:文章状态
status ENUM('draft', 'published', 'archived') DEFAULT 'draft',
-- 小数类型:评分(如果需要)
rating DECIMAL(3, 2) -- 例如 9.85
-- 注意:实际表结构会包含作者ID等外键,这里仅为数据类型示例。
);总结
整数:根据范围选,最常用 INT,极大数用 BIGINT,小状态用 TINYINT。
小数:精确计算(钱)用 DECIMAL,科学计算可用 FLOAT/DOUBLE。
字符串:长度变化大用 VARCHAR,绝对固定用 CHAR,大段文本用 TEXT系列。
日期时间:记录事件发生时间用 DATETIME;记录数据行变更时间用 TIMESTAMP。
黄金法则:在满足需求的前提下,选择最小、最精确、最简单的数据类型。

发表评论
所有评论