字符串类型用于保存姓名、标题、手机号、地址、说明文字等文本信息。MySQL 中最常用的字符串类型包括:
CHARVARCHARTEXTENUMSETCHAR 是定长字符串,VARCHAR 是变长字符串。
它们的主要区别在于:
CHAR 长度固定VARCHAR 按实际内容长度存储适用场景通常如下:
CHAR:长度基本固定的数据,例如性别代码、身份证校验位、状态码VARCHAR:长度变化明显的数据,例如姓名、标题、邮箱、手机号示例:
CREATE TABLE member (
id int NOT NULL AUTO_INCREMENT,
gender char(1) NOT NULL DEFAULT 'U',
name varchar(50) NOT NULL,
mobile varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (id)
);
实际建表时,大部分文本字段都会优先使用 VARCHAR。
TEXT 用于保存较长文本。
适合的场景:
示例:
CREATE TABLE article_content (
id int NOT NULL AUTO_INCREMENT,
title varchar(100) NOT NULL,
content text,
PRIMARY KEY (id)
);
如果字段内容可能远超普通 VARCHAR 的常用长度,就更适合使用 TEXT。
ENUM 是枚举类型,字段值必须是预先定义好的若干个值之一。
适合的场景:
示例:
CREATE TABLE orders (
id int NOT NULL AUTO_INCREMENT,
status enum('pending', 'paid', 'closed') NOT NULL DEFAULT 'pending',
PRIMARY KEY (id)
);
这样可以限制字段只能取指定范围内的值,减少脏数据。
但如果业务状态经常变化,ENUM 后期维护会相对麻烦,这时也可以考虑改用字典表或整数状态码。
SET 用于保存一组可选值中的一个或多个值。
适合的场景:
示例:
CREATE TABLE user_tag (
id int NOT NULL AUTO_INCREMENT,
hobby set('music', 'movie', 'sports', 'travel') DEFAULT NULL,
PRIMARY KEY (id)
);
例如一条记录可以同时保存 music,sports 这样的组合。
不过 SET 在复杂查询和规范化建模方面不一定理想,业务较复杂时通常还是拆成关联表更清晰。
普通短文本优先用 VARCHAR,固定长度数据可以考虑 CHAR,长文本用 TEXT。ENUM 和 SET 能提供一定的取值约束,但使用前应评估业务是否真的适合把规则写死在字段定义里。