字符串类型 === 字符串类型用于保存姓名、标题、手机号、地址、说明文字等文本信息。MySQL 中最常用的字符串类型包括: - `CHAR` - `VARCHAR` - `TEXT` - `ENUM` - `SET` ### CHAR和VARCHAR类型 `CHAR` 是定长字符串,`VARCHAR` 是变长字符串。 它们的主要区别在于: - `CHAR` 长度固定 - `VARCHAR` 按实际内容长度存储 适用场景通常如下: - `CHAR`:长度基本固定的数据,例如性别代码、身份证校验位、状态码 - `VARCHAR`:长度变化明显的数据,例如姓名、标题、邮箱、手机号 示例: ```sql 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` 用于保存较长文本。 适合的场景: - 文章正文 - 商品详情 - 备注信息 - 长说明字段 示例: ```sql CREATE TABLE article_content ( id int NOT NULL AUTO_INCREMENT, title varchar(100) NOT NULL, content text, PRIMARY KEY (id) ); ``` 如果字段内容可能远超普通 `VARCHAR` 的常用长度,就更适合使用 `TEXT`。 ### ENUM类型 `ENUM` 是枚举类型,字段值必须是预先定义好的若干个值之一。 适合的场景: - 性别 - 订单状态 - 支付方式 示例: ```sql CREATE TABLE orders ( id int NOT NULL AUTO_INCREMENT, status enum('pending', 'paid', 'closed') NOT NULL DEFAULT 'pending', PRIMARY KEY (id) ); ``` 这样可以限制字段只能取指定范围内的值,减少脏数据。 但如果业务状态经常变化,`ENUM` 后期维护会相对麻烦,这时也可以考虑改用字典表或整数状态码。 ### SET类型 `SET` 用于保存一组可选值中的一个或多个值。 适合的场景: - 用户兴趣标签 - 星期选择 - 权限标记 示例: ```sql 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` 能提供一定的取值约束,但使用前应评估业务是否真的适合把规则写死在字段定义里。