为了账号安全,请及时绑定邮箱和手机立即绑定

Varchar2和char之间的主要区别是什么

Varchar2和char之间的主要区别是什么

汪汪一只猫 2019-07-31 10:25:09
Varchar2和char之间的主要区别是什么创建表:CREATE TABLE test (charcol    CHAR(10),varcharcol VARCHAR2(10));SELECT LENGTH(charcol), LENGTH(varcharcol) FROM test;结果:LENGTH(CHARCOL) LENGTH(VARCHARCOL)--------------- ------------------             10                  1 请告诉我Varchar2和char有什么区别?我们在什么时候同时使用?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

显示差异的简单示例:


SELECT 

    '"'||CAST('abc' AS VARCHAR2(10))||'"', 

    '"'||CAST('abc' AS CHAR(10))||'"' 

FROM dual;



'"'||CAST('ABC'ASVARCHAR2(10))||'"' '"'||CAST('ABC'ASCHAR(10))||'"'

----------------------------------- -------------------------------

"abc"                               "abc       "                   

1 row selected.

CHAR对于总是固定字符长度的表达式是有用的,例如美国州的邮政编码,例如CA,NY,FL,TX

查看完整回答
反对 回复 2019-07-31
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

这是一个老线程,但它只是谷歌搜索'Oracle char vs varchar2'的顶部,虽然已经有几个答案正确描述了行为char,但我认为需要说你不应该使用它除外在两种特定情况下:

  1. 您正在构建固定长度的文件或报告,并为a分配非null值,从而char避免了对rpad()表达式进行编码的需要。例如,如果firstnamelastname都被定义为char(20),那么firstname || lastname是一种较短的写作方式rpad(firstname,20) || rpad(lastname,20)

  2. 您需要区分显式空字符串''null。通常它们在Oracle中是相同的,但是分配''给一个char值会触发它的空白填充行为,而null不是,所以如果说出差异是很重要的,我真的不能想到它会出现原因的原因,那么你有办法做到这一点。

实际上没有理由char因为某些长度是固定的(例如Y/N标志或ISO货币代码等'USD')而使用。它不是更高效,它不节省空间(没有神秘的长度指示器varchar2,只有一个空白的填充开销char),并且它不会阻止任何人输入更短的值。(如果你输入'ZZ'你的char(3)货币栏,它就会被存储为'ZZ '。)它甚至不能与曾经依赖它的某些古老版本的Oracle向后兼容,因为它从来没有。

传染病可以传播,因为(按照最佳实践),您可以使用类似的东西锚定变量声明sales.currency%type。现在你的l_sale_currency变量是一个秘密char,它会为更短的值(或'')进行无形填空,即使你已经分配给它们两个,也会打开隐藏在l_sale_currency不相等的错误的大门。l_refund_currency'ZZ'

CHAR我确信,在Oracle 6中引入了ANSI兼容性原因。可能有潜在的客户决定购买哪个数据库产品,并且ANSI兼容性在他们的核对表上(或者当时是在那时),并且CHAR在ANSI标准中定义了空白填充,因此Oracle需要提供它。你不应该真正使用它。


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 1081 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信