亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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兼容性原因??赡苡袧撛诘目蛻魶Q定購買哪個數據庫產品,并且ANSI兼容性在他們的核對表上(或者當時是在那時),并且CHAR在ANSI標準中定義了空白填充,因此Oracle需要提供它。你不應該真正使用它。


查看完整回答
反對 回復 2019-07-31
  • 3 回答
  • 0 關注
  • 1122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號