ORACLE中一箇中文字符佔多少字節?

在oracle中一個字符特別是中文佔幾個字節是不同的。

比如我創立一個表create table test_ly(a varchar2(4),b nvarchar2(4))

你說a列能插入兩個漢字嗎?

錯!最多能插入一個漢字加一個字母(或數字)。

這是爲什麼?因爲一個漢字在a字段中佔了3個字節,其他字符(比如數字或者字母或者英文標點符號)佔1個字節,

你說b列最多能插入多少個漢字,2個?

錯!b列最多能插入4個漢字,b列的一個漢字或者其他字符(比如數字或者字母或者英文標點符號)佔2個字節。


由此可見,N開頭的字段類型(比如NCHAR,NVARCHAR2)中,任何一個字符(包括一個漢字)佔2個字節,統一的。

不以N開頭的字段類型(比如CHAR,VARCHAR2)中,unicode字符(比如漢字)佔3個字節,其他字符佔1個字節。


如何求一個字符串佔用的字符數和字節數?

Length 函數求得是佔用字符數,lengthb或者vsize函數求得是佔用字節數。

你說 中華12 這個字符串佔用了多少字符,字節?看sql返回值便清楚了。

select length('中華12') from dual  --返回4,也就是佔用4個字符

select lengthb('中華12') from dual  --返回8,也就是佔用8個字節,其中中華兒子各佔3個字節,而12兩個字符各佔一個字節

select lengthb(N'中華1') from dual  --返回6,這是將字符串轉換成爲unicode字符串後,每個字符佔用2個字節,3個就是6個字節

select length(N'中華1') from dual  --返回3,因爲只有3個字符嘛。


字符串類型字段默認的長度是以字節爲單位的,具體取決於參數nls_length_semantics 的值(使用show parameters可以看到這個參數的值),默認是BYTE,也就是以字節爲單位的,如果是CHAR則是以字符爲單位的。表的某列可以使用字符爲單位嗎?當然可以,比如這樣創建即可:create table test_ly(a varchar2(4 char)) 這樣a列就最多能保存4個字符,而不是4個字節了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章