Java String型別資料的位元組長度

2021-06-08 19:52:07 字數 1202 閱讀 6334

問題描述:

向oracle資料庫中一varchar2(64)型別欄位中插入一條string型別資料,程式使用string.length()來進行資料的長度校驗,如果資料是純英文,沒有問題,但是如果資料中包含中文,校驗可以通過,但是在資料入庫時經常會報資料超長。

問題分析:

既然問題是資料超長,那麼問題應該就是出在資料長度校驗上,也就是出在string.length()這個方法上,來看看jdk是如何描述這個方法的:

length

public int length()返回此字串的長度。長度等於字串中 unicode **單元的數量。

指定者:

介面 charsequence 中的 length

返回:此物件表示的字串行的長度。

public static void main(string args) throws unsupportedencodingexception
結果為6和2。這個方法判斷的是string串的字元長度,但是oracle資料庫中卻是以位元組來判斷varchar2型別資料長度(如:字段定義為varchar2(64),則存入該字段的字串的位元組長度不得超過64)。如果string串為純英文,那麼乙個英文本母是乙個字元,長度為1,佔1個位元組,不會出錯,但如果string串中包含中文,乙個中文漢字也是乙個字元,長度為1,但是卻佔多個位元組(具體佔幾個位元組跟使用的編碼有關),如果資料中包含中文,資料的長度就很有可能會超過資料庫中對應欄位的長度限制

不同資料庫對字串型別資料長度的計算方式不同,如:mysql資料庫中以字元長度來判斷varchar型別資料的長度(如:字段定義varchar,長度定為64,小數字定義為0,則存入該字段的字串的字元長度不得超過64)

解決方式:

既然是判斷資料長度時以字元為標準導致出錯,那麼思路就很明確了,在進行資料長度校驗時,取資料的位元組長度:

public static void main(string args) throws unsupportedencodingexception
結果為6和6,為什麼轉換成utf-8呢,因為資料庫使用的是utf-8編碼,既然資料最終是要存到資料庫中,那麼首先先要保證資料在程式中時、在資料庫中時的編碼一致(同乙個字元在不同的編碼格式中所佔的位元組位數不一致,這點很關鍵),然後再保證程式和資料庫判斷資料長度的方式一致,才能避免程式校驗通過,入庫時卻提示資料長度超長的問題

java String型別總結

總結昨天遇到的乙個string型別的知識 在記錄題目之前先補充幾個知識點 1.string a abc 與string b new string abc 此時的變數a b兩個物件不相等。a b不成立 但是 a.equal b 成立 並且無論a,b的定義位置如何,都不會影響到該結論 2.string ...

Java String型別如何判斷相等?

最初我寫的是 輸入乙個string類的變數,如果它既不是a 也不是b,那就報錯,重新輸入。我寫的 是 scanner sc new scanner system.in system.out.print 請輸入種類 a或b string type sc.next if type a type b if...

JAVA string常用的操作

class stringmethoddemo public static void method sub public static void method split public static void method replace public static void method trans...