Skip to content

Latest commit

 

History

History
114 lines (78 loc) · 2.52 KB

File metadata and controls

114 lines (78 loc) · 2.52 KB

字符串类型

字符串类型用于保存姓名、标题、手机号、地址、说明文字等文本信息。MySQL 中最常用的字符串类型包括:

  • CHAR
  • VARCHAR
  • TEXT
  • ENUM
  • SET

CHAR和VARCHAR类型

CHAR 是定长字符串,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类型

TEXT 用于保存较长文本。

适合的场景:

  • 文章正文
  • 商品详情
  • 备注信息
  • 长说明字段

示例:

CREATE TABLE article_content (
  id int NOT NULL AUTO_INCREMENT,
  title varchar(100) NOT NULL,
  content text,
  PRIMARY KEY (id)
);

如果字段内容可能远超普通 VARCHAR 的常用长度,就更适合使用 TEXT

ENUM类型

ENUM 是枚举类型,字段值必须是预先定义好的若干个值之一。

适合的场景:

  • 性别
  • 订单状态
  • 支付方式

示例:

CREATE TABLE orders (
  id int NOT NULL AUTO_INCREMENT,
  status enum('pending', 'paid', 'closed') NOT NULL DEFAULT 'pending',
  PRIMARY KEY (id)
);

这样可以限制字段只能取指定范围内的值,减少脏数据。

但如果业务状态经常变化,ENUM 后期维护会相对麻烦,这时也可以考虑改用字典表或整数状态码。

SET类型

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,长文本用 TEXTENUMSET 能提供一定的取值约束,但使用前应评估业务是否真的适合把规则写死在字段定义里。