navicat新建sqlite表时字段类型仅支持integer、text、real、blob四种标准类型,选varchar等非标类型会报“invalid data type”;主键自增必须同时满足类型为integer、勾选“主键”和“自动递增”;路径需可写且避免系统保护目录,否则提示“无法创建表”但不明确报错原因。
navicat里新建sqlite表时,字段类型选错会直接报错
sqlite本身不校验字段类型(比如把varchar写成string也能建表),但navicat的可视化建表界面会强制校验——它只认integer、text、real、blob这四种标准类型。选其他名称(如varchar(100))在保存时会弹出“invalid data type”错误。
- 实际建表时,
VARCHAR(100)和TEXT效果一样,直接选TEXT就行 -
INTEGER PRIMARY KEY才触发自增行为;只写INTEGER加“自动递增”勾选框是无效的 - Navicat对
DEFAULT CURRENT_TIMESTAMP支持良好,但别手输datetime类型——选TEXT或NUMERIC都行,SQLite内部按字符串存时间
主键+自增必须同时设,否则ID不会自动填充
在Navicat字段设置面板里,“设为主键”和“自动递增”是两个独立开关。但SQLite只在INTEGER PRIMARY KEY这一种组合下才启用自增逻辑。单独勾选“自动递增”没用,单独设主键但类型不是INTEGER也不行。
- 正确操作:类型选
INTEGER→ 勾选“主键” → 勾选“自动递增” - 错误示例:
TEXT类型设主键,插入时INSERT INTO table (name) VALUES ('a')会报NOT NULL constraint failed - 如果已有表想补自增,Navicat不支持修改主键类型,得用命令行执行
ALTER TABLE加新列再迁移数据
保存表名前必须确认路径可写,否则提示“无法创建表”
Navicat创建SQLite表本质是往.db文件里写数据。如果数据库文件放在系统保护目录(如C:\Program Files)、只读U盘,或父目录不存在,点击“保存”时只会显示模糊错误:“无法创建表”,不提示具体权限问题。
- 安全路径:用户目录下,如
C:\Users\YourName\music\database\music.db - 检查方式:右键数据库连接 → “属性” → 看“数据库文件”路径是否可写(尝试新建一个空.txt文件测试)
- Navicat 15+版本对中文路径支持较好,但旧版遇到
music数据库.db这种带空格或中文名可能失败,建议用music_db.db
触发器和注释在Navicat里没法可视化编辑
像CREATE TRIGGER或表/字段注释(-- 音乐表)这类SQL特性,Navicat的图形界面完全不提供入口。你只能通过“查询”窗口手写SQL执行,且要注意语法细节。
- 触发器必须用
AFTER UPDATE ON 表名,不能写BEFORE——Navicat生成的默认模板是错的 - 字段注释要用
COMMENT子句,但SQLite 3.45.0之前不支持,得靠代码层维护文档 - 执行
DROP TABLE IF EXISTS music前,先手动删掉关联触发器,否则会残留trigger_music_update_time导致后续建表失败
Navicat建SQLite表真正的门槛不在操作步骤,而在它把SQLite的宽松语义强行套进关系型数据库的UI范式里——类型校验、主键约束、路径权限这些底层细节,稍不注意就卡在“保存失败”那一步,还找不到原因。











