何时在Varchar2上使用Char

时间:2019-07-03 10:12:29

标签: oracle sqldatatypes

使用CHAR比使用VARCHAR2有什么好处吗?特别是Oracle数据库?据我所知,实际上并没有很多建议使用VARCHAR2

除了固定长度和可变长度之外,还有什么区别?

为什么没有什么好处,却根本没有从Oracle中删除?

1 个答案:

答案 0 :(得分:1)

已被问及回答

Oracle datatype: Should I use VARCHAR2 or CHAR

只是为了避免混淆很多错误的信息。以下是有关差异(包括性能)的一些信息

参考:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2668391900346844476

  

由于char只不过是空白填充的VARCHAR2   到最大长度-即X列之间的差   和下面的Y:

     

创建表t(x varchar2(30),y char(30));插入t(x,y)   值(rpad('a',',, 30),'a');

     

绝对没有,并且鉴于X列之间的差异   和下面的Y:

     

插入t(x,y)个值('a','a')

     

是X占用3个字节(空指示符,前导字节长度,1   'a'的字节),Y占用32个字节(空指示符,前导字节)   长度,'a')的30个字节)

     

嗯,varchar2将在某种程度上“处于优势表现   明智”。它根本不能帮助char(30)始终为30个字节-   我们,这只是一个varchar2,空白填充到最大   长度。它可以帮助我们进行加工-零,zilch,zippo。

     

任何时候您看到有人说“速度快50%”,就是这样-   没有例子,没有科学,没有事实,没有故事可以支持-只是笑   向他们大声喊叫,继续前进。

     

该页面上还有其他“虚构的东西”,例如:

     
    

“由于所有字符串都存储在一个中,因此在CHAR中搜索速度更快     彼此指定位置,系统不必     搜索字符串的结尾。而在VARCHAR中,系统必须     首先找到字符串的结尾,然后再进行搜索。”

  
     

FALSE:字符只是填充的varchar2空白-我们不存储   字符串“彼此之间在指定位置”。我们确实在寻找   字符串的结尾-我们使用前导字节长度来计算事物