程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oralce中漢字長度問題

Oralce中漢字長度問題

編輯:Oracle教程

Oralce中漢字長度問題


一般,我們在Java層驗證字符串長度的時候,使用String.length()方法,無論中文還是英文,返回的長度都是一樣的。

但是,在插入數據庫後,有時候會報錯(長度越界)。

public class StringLength {
	
	public static void main(String[] args) {
		System.out.println("測試".length());
		System.out.println("cs".length());
	}

}
控制台顯示結果為:
2
2
但是在數據庫中,根據數據庫字符集的不同,漢字所占的“位數”也不相同: 數據庫字符集 所占位數 WE8ISO8859P1 1 AL32UTF8 3 ZHS16GBK 2

所以,當我們設定一個字段username最長為3時,數據庫中必須這樣定義

WE8ISO8859P1 情況下    varchar(3)
AL32UTF8 情況下             varchar(9)
ZHS16GBK 情況下            varchar(6)
這就要求我們在定義表的時候考慮到應用情況。

那麼如何查看當前數據庫的字符集呢?

select * from nls_database_parameters;
當然,還需要注意,查看數據庫中字符長度和字節長度的問題,因為varchar類型定義的長度為字節長度。
varchar(3) 等價於 varchar(3 byte)
所以,執行下邊代碼會出現:
select length('測試') from dual;  --2
select lengthb('測試') from dual; --4
select length('cs') from dual;    --2
select lengthb('cs') from dual;   --2

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved