问题描述
Oracle数据库定义VARCHAR2(500)与定义VARCHAR2(50),存储"Hello Oralce"占用的空间是否一样大?为什么?
自己推理:如果两者占用空间一样大,那么VARCHAR2(较小值)还有什么意义,直接定义VARCHAR2(MAX_LENGTH)不就OK了?
问题分析
oracle的varchar2在存储的时候是根据具体插入数据的大小来决定存储大小的。既然这样,我们一直用varchar2(4000)设置这种类型不就好了吗?这样省去了对于字段大小的估计问题,很省事。但为什么不能这样呢?
问题解决
个人认为比较客观和具体的结论是:如果直接都用varchar2(4000)的话,很容易导致在建立联合索引的时候产生ORA-01450错误。
参考资料:
[1] https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:3014576500346676264
[2] https://stackoverflow.com/questions/24258841/oracle-varchar2-using-the-max-length