根据您的字符集,CHAR(1 BYTE)可能无法存储任何特定字符,因此如果我们讨论的是多字节字符,则VARCHAR2(2000 BYTE)和CHAR(1 BYTE)之间可能存在差异.
更一般地说,在SQL中(PL/SQL规则有点不同)如果只存储1个字节的数据,VARCHAR2(2000 BYTE)将不会消耗比CHAR(1 BYTE)更多的存储空间(我假设"高效"主要转化为存储效率".VARCHAR2(2000 BYTE)将经常导致客户端应用程序分配一个2000字节的缓冲区来保存字段的内容,因为客户端应用程序事先不知道实际的数据大小,这可能导致客户端应用程序使用过多RAM的数量.但是,这可能会或可能不会转化为真正的问题.大多数客户端应用程序都没有损坏RAM,大多数结果集都没有向客户端返回数百万行,因此在几百行上浪费几个k可能不是什么大问题.
有一个AskTom线程更详细,特别是关于PL/SQL规则.