二进制类型 === 二进制类型用于保存原始字节数据,而不是普通文本。它们更适合图片、文件片段、哈希值、协议数据、二进制标识等场景。 MySQL 中常见的二进制类型包括: - `BIT` - `BINARY` - `VARBINARY` - `BLOB` ### BIT类型 `BIT` 用于保存位值数据,适合表示开关、标志位等非常紧凑的数据。 示例: ```sql 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类型 `BINARY` 是定长二进制字符串,`VARBINARY` 是变长二进制字符串。 它们和 `CHAR` / `VARCHAR` 的区别在于: - 前者存储的是原始字节 - 后者存储的是字符数据 适用场景: - 加密后的短字节串 - 二进制摘要 - 固定长度的字节标识 示例: ```sql CREATE TABLE api_secret ( id int NOT NULL AUTO_INCREMENT, token binary(16) NOT NULL, secret varbinary(64) NOT NULL, PRIMARY KEY (id) ); ``` ### BLOB类型 `BLOB` 用于保存较大的二进制对象(Binary Large Object)。 适合的场景: - 图片二进制内容 - 文件内容 - 音频片段 - 序列化后的二进制数据 示例: ```sql 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`。