中文在oracle裡到底佔幾個字元位
問題描述
或許你會說一箇中文字元佔2個位元組,這是一定的?如何計算一個字串的位元組數?
解決方案
在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個位元組了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24492954/viewspace-765139/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JS判斷字串長度(英文佔1個字元,中文漢字佔2個字元)JS字串字元
- 在這裡佔個坑
- 繼:我朝特有需求之《英文字元佔 0.5 個,中文字元佔 1 個》字元
- 排行榜裡那些語言,你到底會幾個?
- Java中boolean到底佔幾位元組?JavaBoolean
- oracle密碼特殊字元在imp、exp裡的使用Oracle密碼字元
- 在Oracle 中查詢某個欄位存在於哪幾個表 (轉)Oracle
- 字元編碼及空白漢字佔位符字元
- oracle裡面的幾個環境變數表Oracle變數
- 我就想知道到底有幾個程式在執行
- Oracle 中文字元及中文亂碼判斷Oracle字元
- Linux 中 awk命令如何擷取指定欄位的前幾個字元Linux字元
- 得到字串 位元組 長度 中文 兩個字元 英文一個字元字串字元
- Oracle中文漢字佔用位元組Oracle
- CSS 實現頭像名稱首字元自動佔位CSS字元
- 欄位字元型別不匹配導致CPU佔用率高字元型別
- 一個Java物件到底佔多大記憶體?Java物件記憶體
- Authorization Value 用到的幾個字元:冒號字元
- 一個Java物件到底佔用多大記憶體?Java物件記憶體
- 在我眼裡的幾種語言
- 在Oracle裡設定訪問多個SQL Server(轉)OracleSQLServer
- 2.9Python基礎語法(7):轉義字元&佔位符Python字元
- 字元陣列的幾個應用函式字元陣列函式
- String s="a"+"b"+"c",到底建立了幾個物件?物件
- 預設文件模型裡的 pid欄位到底是什麼?模型
- oracle幾個函式Oracle函式
- Oracle-批量修改欄位裡面的值Oracle
- 包含中文的字串中擷取前N個字元字串字元
- 佔位3
- 佔位2
- Authorization Value 用到的幾個字元:井號-->之三字元
- Authorization Value 用到的幾個字元:冒號-->之一字元
- Redis到底快在哪裡Redis
- Java char 型別究竟佔幾個位元組?Java型別
- 大學裡面的幾個失敗專案
- sqlserver判斷欄位值是否存在某個字元SQLServer字元
- 製作 kettle 外掛時,在 processRow 方法裡的幾個常用方法說明:
- 詳解 Go 語言中 20 個佔位符!Go