oracle varchar 和varchar2的區別


 

區別:

1.CHAR的長度是固定的,而VARCHAR2的長度是可以變化的, 比如,存儲字符串“abc",對於CHAR (20),表示你存儲的字符將占20個字節(包括17個空字符),而同樣的VARCHAR2 (20)則只占用3個字節的長度,20只是最大值,當你存儲的字符小於20時,按實際長度存儲。 

ps:一個漢字兩個字節,比如定義“電工材料類供應商名錄”,需要char(20)

2.CHAR的效率比VARCHAR2的效率稍高。 

3.目前VARCHAR是VARCHAR2的同義詞。工業標准的VARCHAR類型可以存儲空字符串,但是oracle不這樣做,盡管它保留以后這樣做的權利。Oracle自己開發了一個數據類型VARCHAR2,這個類型不是一個標准的VARCHAR,它將在數據庫中varchar列可以存儲空字符串的特性改為存儲NULL值。如果你想有向后兼容的能力,Oracle建議使用VARCHAR2而不是VARCHAR。

 

 

何時該用CHAR,何時該用varchar2? 

CHAR與VARCHAR2是一對矛盾的統一體,兩者是互補的關系. 

VARCHAR2比CHAR節省空間,在效率上比CHAR會稍微差一些,即要想獲得效率,就必須犧牲一定的空間,這也就是我們在數據庫設計上常說的‘以空間換效率’。 

VARCHAR2雖然比CHAR節省空間,但是如果一個VARCHAR2列經常被修改,而且每次被修改的數據的長度不同,這會引起‘行遷移’(Row Migration)現象,而這造成多余的I/O,是數據庫設計和調整中要盡力避免的,在這種情況下用CHAR代替VARCHAR2會更好一些。

 

 

char varchar nchar nvarchar 四者的區別

 

1、char[(n)]

 

長度為 n 個字節的固定長度且非 Unicode 的字符數據。n 必須是一個介於 1 和 8,000 之間的數值。存儲大小為 n 個字節。char 在 SQL-92 中的同義詞為 character。

 

2、varchar[(n)]

 

長度為 n 個字節的可變長度且非 Unicode 的字符數據。n 必須是一個介於 1 和 8,000 之間的數值。存儲大小為輸入數據的字節的實際長度,而不是 n 個字節。所輸入的數據字符長度可以為零。varchar 在 SQL-92 中的同義詞為 char varying 或 character varying。

 

如果沒有在數據定義或變量聲明語句中指定 n,則默認長度為 1。如果沒有使用 CAST 函數指定 n,則默認長度為 30。

 

將為使用 char 或 varchar 的對象被指派數據庫的默認排序規則,除非用 COLLATE 子句另外指派了特定的排序規則。該排序規則控制用於存儲字符數據的代碼頁。

 

支持多語言的站點應考慮使用 Unicode nchar 或 nvarchar 數據類型以盡量減少字符轉換問題。如果使用 char 或 varchar: 

 

如果希望列中的數據值大小接近一致,請使用 char。

 

 

如果希望列中的數據值大小顯著不同,請使用 varchar。 

如果執行 CREATE TABLE 或 ALTER TABLE 時 SET ANSI_PADDING 為 OFF,則一個定義為 NULL 的 char 列將被作為 varchar 處理。 

 

當排序規則代碼頁使用雙字節字符時,存儲大小仍然為 n 個字節。根據字符串的不同,n 個字節的存儲大小可能小於 n 個字符。

 

 

 

 

nchar 是固定長度 Unicode 數據的數據類型,nvarchar 是可變長度 Unicode 數據的數據類型,二者均使用 UNICODE UCS-2 字符集。

 

3、nchar(n)

 

包含 n 個字符的固定長度 Unicode 字符數據。n 的值必須介於 1 與 4,000 之間。存儲大小為 n 字節的兩倍。nchar 在 SQL-92 中的同義詞為 national char 和 national character。

 

3、nvarchar(n)

 

包含 n 個字符的可變長度 Unicode 字符數據。n 的值必須介於 1 與 4,000 之間。字節的存儲大小是所輸入字符個數的兩倍。所輸入的數據字符長度可以為零。nvarchar 在 SQL-92 中的同義詞為 national char varying 和 national character varying。

 

 

如果沒有在數據定義或變量聲明語句中指定 n,則默認長度為 1。如果沒有使用 CAST 函數指定 n,則默認長度為 30。

 

如果希望列中所有數據項的大小接近一致,則使用 nchar。

 

如果希望列中數據項的大小差異很大,則使用 nvarchar。

 

使用 nchar 或 nvarchar 的對象被賦予數據庫的默認排序規則,除非使用 COLLATE 子句賦予特定的排序規則。

 

SET ANSI_PADDING OFF 不適用於 nchar 或 nvarchar。SET ANSI_PADDING ON 永遠適用於 nchar 和 nvarchar。

 

 

===========================================================================

 

nchar(n)  

 

   

 

    包含     n     個字符的固定長度     Unicode     字符數據。n     的值必須介於     1     與     4,000     之間。存儲大小為     n     字節的兩倍。nchar     在     SQL-92     中的同義詞為     national     char     和     national     character。  

 

   

 

    nvarchar(n)  

 

   

 

    包含     n     個字符的可變長度     Unicode     字符數據。n     的值必須介於     1     與     4,000     之間。字節的存儲大小是所輸入字符個數的兩倍。所輸入的數據字符長度可以為零。nvarchar     在     SQL-92     中的同義詞為     national     char     varying     和     national     character     varying。  

 

   

 

    注釋  

 

    如果沒有在數據定義或變量聲明語句中指定     n,則默認長度為     1。如果沒有使用     CAST     函數指定     n,則默認長度為     30。  

 

   

 

    如果希望列中所有數據項的大小接近一致,則使用     nchar。  

 

   

 

    如果希望列中數據項的大小差異很大,則使用     nvarchar。  

 

   

 

    使用     nchar     或     nvarchar     的對象被賦予數據庫的默認排序規則,除非使用     COLLATE     子句賦予特定的排序規則。  

 

   

 

    SET     ANSI_PADDING     OFF     不適用於     nchar     或     nvarchar。SET     ANSI_PADDING     ON     永遠適用於     nchar     和     nvarchar。  

 

   

 

   二、char     和     varchar  

 

    固定長度     (char)     或可變長度     (varchar)     字符數據類型。  

 

   

 

    char[(n)]  

 

   

 

    長度為     n     個字節的固定長度且非     Unicode     的字符數據。n     必須是一個介於     1     和     8,000     之間的數值。存儲大小為     n     個字節。char     在     SQL-92     中的同義詞為     character。  

 

   

 

    varchar[(n)]  

 

   

 

    長度為     n     個字節的可變長度且非     Unicode     的字符數據。n     必須是一個介於     1     和     8,000     之間的數值。存儲大小為輸入數據的字節的實際長度,而不是     n     個字節。所輸入的數據字符長度可以為零。varchar     在     SQL-92     中的同義詞為     char     varying     或     character     varying。  

 

   

 

    注釋  

 

    如果沒有在數據定義或變量聲明語句中指定     n,則默認長度為     1。如果沒有使用     CAST     函數指定     n,則默認長度為     30。  

 

   

 

    將為使用     char     或     varchar     的對象被指派數據庫的默認排序規則,除非用     COLLATE     子句另外指派了特定的排序規則。該排序規則控制用於存儲字符數據的代碼頁。  

 

   

 

    支持多語言的站點應考慮使用     Unicode     nchar     或     nvarchar     數據類型以盡量減少字符轉換問題。如果使用     char     或     varchar:    

 

   

 

    如果希望列中的數據值大小接近一致,請使用     char。  

 

   

 

   

 

    如果希望列中的數據值大小顯著不同,請使用     varchar。    

 

    如果執行     CREATE     TABLE     或     ALTER     TABLE     時     SET     ANSI_PADDING     為     OFF,則一個定義為     NULL     的     char     列將被作為     varchar     處理。    

 

   

 

    當排序規則代碼頁使用雙字節字符時,存儲大小仍然為     n     個字節。根據字符串的不同,n     個字節的存儲大小可能小於     n     個字符。  

 

總結:

 

   1、 varchar:  

 

              可變長度的非    Unicode   數據,最長為    8,000    個字符。  

 

   2、nvarchar:  

 

              可變長度    Unicode    數據,其最大長度為    4,000    字符。  

 

   3、char:

 

          固定長度的非 Unicode 字符數據,最大長度為 8,000 個字符。

 

   4、nchar

 

         固定長度的 Unicode 數據,最大長度為 4,000 個字符。

 

    5、     char和varchar都是字符串類型的

 

        用Unicode編碼的字符串,結果是字符的整數值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM