Navicat 16中修改字段Binary属性需在“设计表”中选中CHAR/VARCHAR/TEXT类型字段,于字段属性面板勾选“Binary”修饰符(非独立类型),保存后生成含BINARY关键字的MODIFY语句,该设置仅改变字节级比较行为,不影响存储格式与中文支持。
Navicat 16 修改字段时如何设置 Binary 属性
在 navicat 16 中,binary 不是独立的数据类型,而是 char、varchar 等字符串类型的**修饰属性**。勾选 “binary” 实际上是让该字段按二进制字节比较(区分大小写、不忽略尾部空格),而非字符语义比较。它不会改变存储格式,也不会自动转为 blob 或 varbinary。
常见错误现象:
- 勾选了 Binary,但字段仍能存入中文 —— 正常,
VARCHAR BINARY依然支持 UTF-8 字符,只是排序/比较行为变了 - 修改后执行失败,提示
Invalid default value for 'xxx'—— 因为 Binary 字段若设了默认值(如''),某些 MySQL 版本会校验更严格 - 导出 SQL 时没看到
BINARY关键字 —— Navicat 有时只在内部标记,生成的 DDL 可能省略(尤其用ALTER TABLE MODIFY时)
正确操作路径:
- 右键表 → “设计表” → 选中目标字段(必须是
CHAR/VARCHAR/TEXT类型) - 在右侧“字段属性”面板中,找到并勾选
Binary复选框(不是“二进制数据”按钮) - 点击“保存”,Navicat 会生成类似
MODIFY COLUMN name VARCHAR(50) BINARY的语句
Binary 和 VARBINARY 的关键区别别搞混
BINARY(作为修饰符)和 VARBINARY(作为独立类型)作用完全不同,不能互相替代:
-
VARCHAR(10) BINARY:仍是变长字符串,长度单位是字符,但比较按字节;可存 UTF-8 多字节字符 -
VARBINARY(10):是纯字节序列,长度单位是字节;存入 '中'(UTF-8 占 3 字节)会截断或报错,取决于 strict mode - Navicat 的“Binary”勾选项只影响前者;若要改用
VARBINARY,必须手动把数据类型从VARCHAR改成VARBINARY,再填长度
性能影响:启用 BINARY 后,索引查找和 ORDER BY 会变快(跳过字符集转换),但 LIKE '%abc%' 这类模糊查询无加速效果。
修改 Binary 属性时容易被忽略的兼容性问题
MySQL 5.7+ 默认开启 STRICT_TRANS_TABLES,此时修改 Binary 属性可能触发隐式转换失败:
- 字段原为
VARCHAR(10)且含非 ASCII 数据(如 emoji),改为VARCHAR(10) BINARY通常没问题 - 但如果字段有默认值
' '(空格),而当前字符集是utf8mb4,MySQL 可能拒绝修改,报错Data truncated for column 'xxx' - 解决办法:先清空默认值(设为
NULL或删掉),保存后再补回;或改用ALTER TABLE ... ALTER COLUMN ... SET DEFAULT单独处理
真正需要存二进制文件(图片、PDF)时,不要依赖 BINARY 修饰符 —— 直接用 BLOB 或 VARBINARY 类型,并通过 Navicat 的“二进制数据”按钮导入导出。勾选 Binary 只解决“字符串怎么比”,不解决“文件怎么存”。


















