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

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有什么区别?我们在什么时候同时使用?


汪汪一只猫
浏览 1082回答 3
3回答

MMTTMM

显示差异的简单示例: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

ABOUTYOU

这是一个老线程,但它只是谷歌搜索'Oracle char vs varchar2'的顶部,虽然已经有几个答案正确描述了行为char,但我认为需要说你不应该使用它除外在两种特定情况下:您正在构建固定长度的文件或报告,并为a分配非null值,从而char避免了对rpad()表达式进行编码的需要。例如,如果firstname和lastname都被定义为char(20),那么firstname || lastname是一种较短的写作方式rpad(firstname,20) || rpad(lastname,20)。您需要区分显式空字符串''和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需要提供它。你不应该真正使用它。
打开App,查看更多内容
随时随地看视频慕课网APP