2014-10-30 95 views
0

我需要驗證要在數據庫中存儲爲VARCHAR2(4000字節)列的字符串值的最大長度。我應該採取什麼樣的最大長度?我假設2000年,因爲Java字符串編碼爲UTF-16,但我錯過了什麼?是否有任何情況下2000字符串可能需要超過4000字節?給定字節數的最大字符串長度

回答

0

在UTF-16中,根據我在線閱讀的內容,Java可以用一個或兩個16位值表示字符。檢查的最好方法是在你可能編碼的內容中使用一個示例字符串,並打印出長度,然後將其用作應用程序開發的參考。

下面是示例代碼,你可以用它來測試這一點:

String s = "Hello, world!"; 
int byteCountUTF16 = s.getBytes("UTF-16").length; 
+0

「UTF-16」可能需要用Java [charset name](http://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html#名稱)對應於數據庫的字符集。 – VGR 2014-10-30 22:02:03

2

沒有, Java中的2000字符串不能拿超過4000個字節的字符數據。您可能偶爾會聽到它說UTF-16是一種可變長度編碼,因爲它可能需要2或4個字節才能表示Unicode碼點。雖然這是真的,但它是無關緊要的,因爲Java的「字符」不是一個Unicode代碼點,而是一個總是2個字節的UTF-16代碼單元。因此,Java中的2000字符的字符串正好是4000個字節的UTF-16數據。

切線警告:根據您對VARCHAR2的使用情況,在我看來您使用的是Oracle數據庫。 Oracle有兩個主要字符集設置,即數據庫字符集和國家字符集。第一個由VARCHAR2列(等等)使用,另一個由NVARCHAR2列(再次使用)。不支持UTF-16 用作數據庫字符集,但用於國家字符集。我不知道你的數據層是什麼樣的,所以我不能說這會對你有什麼影響,但是你可以閱讀this Oracle document on character sets瞭解更多信息。

總的來說,Java中的2000個字符的字符串最終可能會在其他地方超過4000個字節 - 如果在某個地方,它會轉換爲不同的編碼。