navicat新建oracle表时字段类型须选varchar2而非varchar,数值用number(10)或number(10,2)避免空间浪费,date足够常规日期,email建议varchar2(100)防utf8中文超限;主键需同时设not null并勾选pk,约束如性别需手动填xb in ('男','女'),表名须大写防双引号问题。
navicat里新建表时字段类型怎么选
oracle不支持varchar,必须用varchar2;数值字段别直接写int或integer,它会映射成number(38),浪费空间且影响索引效率。真实场景中:number(10)存id,number(10,2)存金额,date就够了,除非要毫秒级才用timestamp。
常见错误:把EMAIL设成VARCHAR2(255)——Oracle默认字符集是AL32UTF8,一个中文占3字节,255实际只能存85个汉字;建议按业务上限设,比如VARCHAR2(100)更稳妥。
主键和约束在图形界面里怎么配
Navicat建表时,主键不是勾个“PK”就完事。必须确认两点:ID字段已设为NOT NULL,且在“主键”列点一下打钩(单击字段行左侧的钥匙图标也行)。否则导出SQL可能漏NOT NULL,后续插入NULL会报ORA-01400: cannot insert NULL into ("APP_USER"."XSB"."XH")。
唯一约束、检查约束不能只靠界面勾选:比如性别字段XB要限制只能是‘男’或‘女’,得手动在“检查”栏填XB IN ('男','女');Navicat不会自动生成这个条件,漏了就等于没约束。
- 默认值要写明确值,比如
'男',不能写DEFAULT '男'(界面已隐含DEFAULT) - 外键得先确保被引用表存在,且字段类型完全一致(
NUMBER(10)和NUMBER不算一致) - 非空约束和主键分开设置,主键自动带非空,但其他字段如
CREATE_TIME必须单独勾NOT NULL
保存表时Navicat生成的SQL要注意什么
点击“保存”后,Navicat会弹出SQL预览窗口。这里容易忽略三件事:
第一,表名默认是小写,Oracle里就是"xs"(带双引号),之后所有SQL都得加引号才能查到——正确做法是建表前把表名全大写,比如XSB,这样生成的SQL里没有引号,后续写SELECT * FROM XSB就不用纠结大小写。
第二,路径里的数据文件名如果含空格或中文(如D:\oracle data\app.dbf),建表空间会失败,但Navicat不报错,只卡在“正在执行”;得手动改路径为D:\oracle_data\app.dbf。
第三,自动扩展参数里“最大大小”若填UNLIMITED,某些老版本Oracle(如11g)不认,得改成具体值如10240M。
建完表立刻查不到?可能是用户权限或模式问题
用APP_USER登录后建的表,在Navicat左侧对象树里看不到,大概率是没刷新或连接没切到对应模式。右键连接名→“刷新”,或顶部菜单选“连接”→“切换模式”,手动选APP_USER。如果还是空白,执行SELECT table_name FROM user_tables;确认表真存在——返回空说明建表时误用了SYSTEM用户,表其实在SYSTEM下,得用SELECT * FROM SYSTEM.XSB查。
另一个坑:Navicat默认不显示系统表和回收站表,但如果你删过同名表又重建,旧表可能还在回收站里占着名字,新表实际没建成功。此时运行SHOW RECYCLEBIN,再DROP TABLE XSB PURGE;清掉残留。











