參數NLS_LENGTH_SEMANTICS的設定問題

來源:互聯網
上載者:User

在Oracle資料庫中和Oracle FORM中都 有這樣一個參數的設定,有必要澄清一下:

參數NLS_LENGTH_SEMANTICS的含義在Oracle文檔中這樣描述:

Oracl文檔中的說明:
Syntax: NLS_LENGTH_SEMANTICS = string
Range of values: BYTE | CHAR
NLS_LENGTH_SEMANTICS enables you to create CHAR and VARCHAR2 columns using either byte or character length semantics. Existing columns are not affected.
NCHAR, NVARCHAR2, CLOB, and NCLOB columns are always character-based. You may be required to use byte semantics in order to maintain compatibility with existing applications.
NLS_LENGTH_SEMANTICS does not apply to tables in SYS and SYSTEM. The data dictionary always uses byte semantics.

翻譯過來的意思就是該參數有BYTE和CHAR兩種取值,使你能夠使用這兩種語義建立CHAR或VARCHAR2類型的資料庫表列,而對現有的列沒有影響。

二者的區別就是一個是按字元存放,另一個按位元組存放;一般情況資料庫都會使用UTF-8編碼,一個漢字如果按位元組存放,就需要3個位元組。

舉例說明:

SQL> create table t1 (col1 varchar2(8));
Table created.

但是測試插入三個漢字的時候就報錯了。
SQL> insert into t1 values('一二三');
insert into t1 values('一二三')
*
ERROR at line 1:
ORA-12899: value too large for column "NC31"."T1"."COL1" (actual: 9, maximum:8)

檢查相關參數及環境變數。
SQL> select * from NLS_DATABASE_PARAMETERS

可以看到資料庫中參數NLS_LENGTH_SEMANTICS的設定 ,一般預設為‘BYTE’。

這是因為按位元組存放,3個漢字就需要9個位元組,如果把參數NLS_LENGTH_SEMANTICS設定為‘CHAR’,就可以將資料插入進去了。這是因為按資料庫會按字元計數,而不是位元組。

Oracle Form中:

ITEM屬性設定 中也有Data Length Semantics這樣一個屬性設定,它有三種選擇“NULL”、“CHAR”和“BYTE”,如果設定 為“NULL”則直接從資料庫中擷取,使用資料庫的設定。設定為“CHAR”和“BYTE”則和上述資料庫中的情況一樣。經過測試發現,如果一個字元類型的ITEM的最大長度為100,則當Data Length Semantics設定為“CHAR”時,最多可以輸入100個漢字或100個英文字元;當Data Length Semantics設定為“BYTE”時,最多可以輸入33個漢字或100個英文字元。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.