首页 > 解决方案 > 何时使用 Char 而不是 Varchar2

问题描述

使用 CHAR 而不是 VARCHAR2 有什么好处吗?特别是 Oracle 数据库?当我阅读时,没有,实际上很多人推荐使用 VARCHAR2

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

如果没有任何好处,为什么根本不会从 Oracle 中删除?

标签: oraclesqldatatypes

解决方案


已经问过并回答过

Oracle 数据类型:我应该使用 VARCHAR2 还是 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 个字节(空指示符,前导字节长度,'a' 1 个字节)和 Y 消耗 32 个字节(空指示符,前导字节长度,'a' 30 个字节)

嗯,varchar2 将在某种程度上“在性能方面具有优势”。char(30) 始终是 30 个字节,这对我们有帮助 - 对我们来说,它只是一个 varchar2 ,它被空白填充到最大长度。它可以帮助我们处理 - ZERO、zilch、zippo。

每当你看到有人说“它快 50%”时,就是这样——没有例子,没有科学,没有事实,没有故事来支持它——只要对他们大笑,继续前进。

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

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

FALSE:char 只是 varchar2 填充的空白 - 我们不会将字符串“存储在彼此之间的指定位置”。我们确实搜索字符串的结尾——我们使用前导字节长度来解决问题。


推荐阅读