Navicat 15 连接 SQL Server 需手动添加 CharSet=UTF-8 参数,连接 MySQL 则须设 characterEncoding=utf8mb4、serverTimezone 及初始化命令 SET NAMES utf8mb4,并在导入 SQL 文件时手动选择 UTF-8 编码。
Navicat 15 连接 SQL Server 时必须加 CharSet=UTF-8
navicat 15 默认用 microsoft odbc driver for sql server 建连,但它不读取 windows 区域设置,也不会自动协商 utf-8。不手动加参数,就默认走系统 locale(比如 gbk),导致中文显示为问号或方块。
操作路径:右键连接 → 编辑连接 → 切到「高级」页签 → 找到「ODBC 连接字符串」或「驱动参数」输入框 → 追加:CharSet=UTF-8
- 仅对 Microsoft ODBC Driver 17+ 有效;若用旧版 Native Client,该参数被忽略,必须升级驱动
- SQL Server 2019+ 才原生支持 UTF-8 排序规则;2016/2017 版本只能靠客户端转义,不能依赖服务端转换
- 别去改数据库或列的
collation——乱码不在存储层,改了反而可能破坏已有数据一致性
MySQL 连接要设 characterEncoding=utf8mb4 而不是 utf8
MySQL 的 utf8 实际是阉割版(最多 3 字节),存不了 emoji 和部分生僻中文;utf8mb4 才是真正的 UTF-8。Navicat 15 的 JDBC 或 ODBC 连接字符串里写错,就会触发截断或替换为 ?。
操作路径:编辑连接 → 高级 → 在「附加参数」中填:characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
- 必须同时配
serverTimezone,否则某些时区敏感函数(如NOW())可能出错 - 只设连接参数不够,建议勾选「初始化命令」,填入:
SET NAMES utf8mb4; - 执行
SHOW VARIABLES LIKE 'character\_set%';确认character_set_client、character_set_connection、character_set_results全是utf8mb4
运行 SQL 文件前必须手动选编码,不能信“自动检测”
Navicat 15 的「运行 SQL 文件」对话框里,默认编码常是系统 locale(Windows 上就是 GBK),而你手写的 .sql 文件大概率是 UTF-8 无 BOM —— 自动检测基本失效,直接导致注释和字符串全乱。
正确做法:右键数据库 → 运行 SQL 文件 → 选中文件 → 弹窗中「编码」下拉菜单务必手动选:UTF-8 或 UTF-8 with BOM
- VS Code / Sublime / Notepad++ 默认保存为 UTF-8 无 BOM → 选
UTF-8 - Windows 记事本保存的文件 → 通常带 BOM → 选
UTF-8 with BOM - 千万别用「打开文件」方式把 .sql 拖进查询窗口再执行——那走的是编辑器编码逻辑,和执行逻辑分离,极易误判
编辑器里写中文正常,执行后变乱码?检查 SET NAMES 是否生效
现象:SQL 编辑器里输入 INSERT INTO user (name) VALUES ('张三'); 显示正常,但执行完查出来是 ÕÅÈý。本质是 Navicat 发送语句时,服务端用错了 character_set_client 解析。
验证方法:连接后立即执行:SHOW VARIABLES LIKE 'character\_set_client';,如果不是 utf8mb4,说明初始化没走通。
- 优先在连接高级设置里勾选「使用自定义初始化命令」,填:
SET NAMES utf8mb4; - 避免在查询窗口手动执行
SET NAMES—— 它只对当前会话临时生效,新开查询窗口就失效 - 如果用的是 MySQL 5.7,注意它默认通信字符集是
latin1,即使建库时指定了utf8mb4,不发SET NAMES仍会乱码


















