CSV首行必须是纯净字段名:无BOM、无引号、无空格、无注释,否则Navicat仅显示Field 1/2;勾选“使用第一行作为字段名”且选择“创建新表”才触发自动建表与类型推测,但需手动修正主键、时间类型、NULL约束及字符集(如SET NAMES utf8mb4)。
CSV首行必须是干净字段名,否则Navicat无法识别
navicat 15不会自动猜字段类型或名称——它只认你csv第一行的纯文本。如果首行带bom、空格、引号(如"id")、中文顿号、excel自动生成的field1占位符,或者混着注释(如#id,name),它就只能显示field 1、field 2,后续映射和建表全崩。
实操前务必用文本编辑器(如VS Code)打开CSV,确认首行是这样:
id,name,created_at,status
- 删掉开头的UTF-8 BOM(VS Code右下角显示“UTF-8 with BOM”时,点它→“Save with Encoding”→选“UTF-8”)
- 去掉所有双引号包裹(
"id","name"→ 改成id,name) - 避免用保留字作字段名(如
order、group),否则建表会报语法错误
导入向导里选「创建新表」+「使用第一行作为字段名」才触发自动建表
很多人卡在“为什么没生成表?”,其实是漏了关键两步:不是点「导入到现有表」,也不是跳过字段映射页——必须主动选择「创建新表」,且在第二步「字段映射」页勾选使用第一行作为字段名。
勾选后,Navicat才会把首行当列名,并基于内容样本推测类型(如全数字→INT,含-和:→DATETIME)。但注意:
- 推测不准很常见:手机号
13800138000会被判成BIGINT,但实际该用VARCHAR(11) - 日期字段若格式不统一(
2023/01/01混2023-01-01 10:30:00),会统一判为VARCHAR,而非DATETIME - 布尔值写
true/false会被判成VARCHAR;写1/0才可能判成TINYINT
字段类型得手动调,尤其主键、时间、NULL约束
Navicat生成的表结构只是草稿,直接保存会埋坑。进表设计器后重点改这三处:
-
id列:选中→勾选主键+自动递增(默认没开) -
created_at类时间列:类型从VARCHAR改成DATETIME或TIMESTAMP,并勾选允许空值或填DEFAULT CURRENT_TIMESTAMP - 所有业务字段:检查
允许空值是否符合需求(比如name通常NOT NULL,remark可NULL)
别信「推测完成」提示——它不校验逻辑约束。例如CSV里status全是active/inactive,Navicat仍给VARCHAR(255),你得手动缩成ENUM('active','inactive')或TINYINT。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
中文字段名要同步改Navicat连接字符集,否则建表报错
如果CSV首行是用户ID,姓名,注册时间,而MySQL服务端用utf8mb4,但Navicat连接参数里character_set_client还是gbk,就会出现两种错误:
- 建表SQL里字段名变成乱码,执行时报
You have an error in your SQL syntax - 表建成了,但字段名在Navicat里显示为问号,后续任何操作都失败
解决方法:右键连接→「编辑连接」→「高级」页→在初始化命令框里加一行:
SET NAMES utf8mb4;
保存重连。再导入时,中文字段名才能正确透传到CREATE TABLE语句中。
最易被忽略的是:Navicat用CSV头建表时,不会帮你设索引、外键、唯一约束——这些得导入数据后,手动进表设计器补全。否则看似建好了,查起来慢、关联不上、重复数据拦不住。










