MySQL 8.0 字符存储机制和字段长度设计规范参考
目录
🧩 一、VARCHAR 长度与中文存储关系
在 MySQL 8.0 中,推荐使用 utf8mb4 字符集(兼容 Emoji 和所有中日韩文字)。
| 内容 | 占用字节数 |
|---|---|
| 英文字母/数字 | 1 字节 |
| 中文(UTF-8 编码) | 3 字节 |
| Emoji 表情 | 4 字节 |
⚠️ VARCHAR(n) 的
n是“字符数”而不是字节数,即最多能存储 n 个字符(无论中文还是英文)。
✅ 举例:
|
|
- 能存储 10 个字符;
- 如果全部是中文,能放 10 个汉字;
- 实际占用空间为 30 字节(约);
- 如果包含 emoji 表情,则可能占用更多字节,但仍为 10 字符。
🧭 二、字段长度与类型选择建议
下面是根据字段语义推荐的字段类型与合理长度范围:
| 字段用途 | 推荐类型 | 推荐长度 | 说明与示例 |
|---|---|---|---|
| 主键 ID | BIGINT UNSIGNED |
自增 | 可支持数十亿条数据 |
| 姓名 name | VARCHAR(50) |
50 | 中文姓名通常 <10,预留英文名、机构名空间 |
| 描述 description / remark | VARCHAR(255) 或 TEXT |
- | 一般用 255,若内容较长建议改用 TEXT |
| 邮箱 email | VARCHAR(100) |
100 | 常见邮箱最长 60~70,预留扩展 |
| 手机号 phone | CHAR(11) |
固定长度 11 | 国内手机号标准长度 |
| IP 地址 (IPv4) | VARCHAR(15) |
15 | 例如:255.255.255.255 |
| IP 地址 (IPv6) | VARCHAR(45) |
45 | 例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334 |
| 密码 password | CHAR(60) |
固定长度 | 通常是 bcrypt 或 hash 值长度 |
| URL / 链接 address | VARCHAR(2083) |
2083 | IE 浏览器的最大 URL 长度(通用标准) |
| 时间戳 created_at / updated_at | DATETIME(3) |
- | 精确到毫秒;或使用 TIMESTAMP(3) |
| 布尔状态(启用/禁用) | TINYINT(1) |
- | 0 / 1 表示 true/false |
| 状态码 / 枚举 | ENUM() 或 TINYINT |
- | ENUM 适合固定选项,小型状态推荐用 TINYINT |
| 金额 price | DECIMAL(10,2) |
- | 精确表示金额,最大 99999999.99 |
| 数量 count | INT UNSIGNED |
- | 整数型数量字段 |
| UUID | CHAR(36) |
36 | 例如 550e8400-e29b-41d4-a716-446655440000 |
| JSON 数据 | JSON |
- | 结构化配置数据(如端口映射等) |
| 性别 gender | ENUM('male','female','unknown') |
- | 固定枚举值场景 |
| 地区 / 国家代码 | CHAR(2) 或 CHAR(3) |
- | ISO 3166-1 标准,如 CN、USA |
🧠 三、字段设计的一般建议
-
文本字段(VARCHAR / TEXT)
- 优先使用
VARCHAR(255); - 超长内容(如描述、备注、日志)使用
TEXT; VARCHAR可被索引,TEXT不可直接加索引(需前缀)。
- 优先使用
-
时间字段
- 用
DATETIME(3)表示带毫秒的时间; - 用
TIMESTAMP(3)适合有时区、自动更新场景; - 常用字段:
created_at、updated_at、deleted_at。
- 用
-
标识与外键
- 所有
id建议BIGINT UNSIGNED AUTO_INCREMENT; - 外键对应的类型保持一致。
- 所有
-
索引字段
- 对常用查询条件(如
email、ip、cluster_id)建立索引; - 长文本(如
description)不要索引。
- 对常用查询条件(如
-
字符集与排序规则
-
推荐统一设置:
1DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci -
避免混用
utf8(老版本3字节)与utf8mb4。
-
🔧 四、扩展示例:蜜罐信息表(优化版)
|
|
📊 五、总结表(常用字段长度建议)
| 字段类型 | 推荐长度 | 可存内容示例 |
|---|---|---|
VARCHAR(10) |
10 个字符(≈10 个汉字) | “运行正常” |
VARCHAR(50) |
50 字符 | 姓名、简短标签 |
VARCHAR(100) |
邮箱、URL简短版本 | |
VARCHAR(255) |
常用文本描述字段 | |
VARCHAR(512) |
说明或较长备注 | |
TEXT |
不限长度 | 日志、说明文档 |
JSON |
不限 | 动态结构化数据 |