二进制类型用于保存原始字节数据,而不是普通文本。它们更适合图片、文件片段、哈希值、协议数据、二进制标识等场景。
MySQL 中常见的二进制类型包括:
BITBINARYVARBINARYBLOB
BIT 用于保存位值数据,适合表示开关、标志位等非常紧凑的数据。
示例:
CREATE TABLE feature_flag (
id int NOT NULL AUTO_INCREMENT,
enabled bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (id)
);如果只需要表示“是/否”、“开/关”这类状态,也可以直接使用 TINYINT(1),业务中往往更直观。
BINARY 是定长二进制字符串,VARBINARY 是变长二进制字符串。
它们和 CHAR / VARCHAR 的区别在于:
- 前者存储的是原始字节
- 后者存储的是字符数据
适用场景:
- 加密后的短字节串
- 二进制摘要
- 固定长度的字节标识
示例:
CREATE TABLE api_secret (
id int NOT NULL AUTO_INCREMENT,
token binary(16) NOT NULL,
secret varbinary(64) NOT NULL,
PRIMARY KEY (id)
);BLOB 用于保存较大的二进制对象(Binary Large Object)。
适合的场景:
- 图片二进制内容
- 文件内容
- 音频片段
- 序列化后的二进制数据
示例:
CREATE TABLE attachment (
id int NOT NULL AUTO_INCREMENT,
file_name varchar(100) NOT NULL,
file_data blob,
PRIMARY KEY (id)
);需要注意,大对象直接存数据库虽然方便,但在很多系统里也可能带来备份、传输和查询性能压力,因此有些项目会把文件放对象存储,只在数据库里保存 URL 或元信息。
二进制类型主要处理“字节”,而不是“字符”。短而固定的二进制数据可以考虑 BINARY,长度变化的可以用 VARBINARY,大块二进制内容则使用 BLOB。