Navicat 17 可视化建表字符集冲突的根本原因是字段与数据库/连接层字符集不兼容,需确保连接层、数据库、表三层均为 utf8mb4 并匹配对应排序规则,TEXT 字段不可设默认值,建表成功后须用真实数据(如 emoji)测试插入。
Navicat 17 可视化建表时出现字符集冲突报错,**根本不是界面 bug,而是字段定义与当前数据库/连接层字符集不兼容的明确信号**。它通常表现为保存失败、灰掉按钮、或弹出类似 Incorrect string value、Unknown collation 的错误——此时别改 SQL 语句,先查三层字符集是否对齐。
检查连接层字符集是否为 utf8mb4
navicat 17 默认连接可能仍用 latin1 或 utf8(即 utf8mb3),但只要表里要存 emoji、生僻中文或四字节字符,就必须让连接层声明为 utf8mb4:
- 右键连接 →「编辑连接」→「常规」页签 →「字符集」下拉菜单选
utf8mb4(不是「自动」,也不是utf8) - 切到「高级」页签 → 勾选
Use Unicode UTF-8→ 在「初始化命令」栏填:SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; - 保存后务必断开重连,不要只点「测试连接」——状态栏右下角显示的「字符集」必须是
utf8mb4
确认目标数据库默认字符集已设为 utf8mb4
连接层设对了,不代表库和表就安全。如果目标数据库本身是 utf8 或 latin1,可视化建表时 Navicat 会按库默认值生成 CREATE TABLE 语句,一旦字段含四字节内容,立刻触发 Incorrect string value:
- 执行
SHOW CREATE DATABASE `your_db_name`;,确认输出含DEFAULT CHARACTER SET = utf8mb4 - 若没有,手动执行:
ALTER DATABASE `your_db_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; - 注意:该操作不影响已有表,只影响后续新建表的默认继承值
建表时避免排序规则(collation)不兼容
Navicat 17 在 MySQL 8.0+ 环境下默认使用 utf8mb4_0900_ai_ci,但若你正往 MySQL 5.7 或 MariaDB 迁移,可视化建表保存时会直接报 ERROR 1273 (HY000): Unknown collation:
- 在表设计界面右侧「字符集/排序规则」下拉框中,不要选
utf8mb4_0900_ai_ci,改选utf8mb4_unicode_ci - 如果该选项不可见或被禁用,说明 Navicat 正从连接或库级继承;此时需先确保上一步的数据库
COLLATE已设为utf8mb4_unicode_ci - 建表后可执行
SHOW CREATE TABLE `your_table`;验证,确认COLLATE字段值是目标版本支持的
TEXT 类型字段别乱设 DEFAULT 值
当字段长度超限被迫切到 TEXT / MEDIUMTEXT 时,Navicat 17 仍允许你在「默认值」栏手动输入字符串——但这在 MySQL 5.7 及更早版本会直接导致建表失败,报错 BLOB/TEXT column 'xxx' can't have a default value:
-
TEXT类型字段的「默认值」输入框必须为空(删掉任何内容,包括空格) - 若字段设了
NOT NULL,又不能设默认值,就得改成NULL,否则 MySQL 会拒绝建表 - MySQL 8.0.13+ 支持表达式默认值(如
DEFAULT ('')),但 Navicat 17 可视化界面不识别该语法,仍会清空——此时建议切换到「SQL」页手动补全


















