oracle - 何时使用 Char 而不是 Varchar2
问题描述
使用 CHAR 而不是 VARCHAR2 有什么好处吗?特别是 Oracle 数据库?当我阅读时,没有,实际上很多人推荐使用 VARCHAR2
除了固定长度和可变长度之外,还有什么区别?
如果没有任何好处,为什么根本不会从 Oracle 中删除?
解决方案
已经问过并回答过
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 填充的空白 - 我们不会将字符串“存储在彼此之间的指定位置”。我们确实搜索字符串的结尾——我们使用前导字节长度来解决问题。
推荐阅读
- tensorflow - tensorflow中的梯度计算导入pb文件的graph_def(对象检测)
- outlook - 如何在共享的 Outlook 日历中查找谁创建了约会?
- html - 如何改进此复选框列表以确保某些文本不在复选框下方?
- java - 如何使方法的参数泛型
- javascript - 在选项卡之间切换时自动页面滚动到顶部
- squid - 我可以使用 squid 反向代理网站上的单个目录吗?
- javascript - 避免在 javascript 注入的 css 中出现无样式的内容
- java - 多个 mime 类型作为 @consumes 与多部分文件上传
- python - 从类的多个实例中的组合框获取数据
- laravel - Laravel 7 - 找不到类“Arr”