我需要驗證要在數據庫中存儲爲VARCHAR2(4000字節)列的字符串值的最大長度。我應該採取什麼樣的最大長度?我假設2000年,因爲Java字符串編碼爲UTF-16,但我錯過了什麼?是否有任何情況下2000字符串可能需要超過4000字節?給定字節數的最大字符串長度
0
A
回答
0
在UTF-16中,根據我在線閱讀的內容,Java可以用一個或兩個16位值表示字符。檢查的最好方法是在你可能編碼的內容中使用一個示例字符串,並打印出長度,然後將其用作應用程序開發的參考。
下面是示例代碼,你可以用它來測試這一點:
String s = "Hello, world!";
int byteCountUTF16 = s.getBytes("UTF-16").length;
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個字節 - 如果在某個地方,它會轉換爲不同的編碼。
相關問題
- 1. 字節[]的最大長度?
- 2. 從給定的字符串給定長度的字符的差異字符串
- 3. 字符串的最大長度[]
- 4. 限制字符串的最大長度
- 5. Javascript:最大字符串長度Chrome
- 6. 最大默認長度xsd字符串
- 7. 與最大長度字符串類型
- 8. 字符串到數組,最大長度,字符中斷
- 9. 固定長度字符串的數字
- 10. 將多字節安全字符串裁剪爲給定字節長度
- 11. xslt中字符串的字節長度
- 12. 獲取字符串的字節長度
- 13. 一個字符串的字節長度
- 14. UUID最大字符長度
- 15. 爲什麼字符串的字節長度比長度長?
- 16. 字符數組的最大長度
- 17. 將可變長度字符串分配給固定長度字符串
- 18. 查找最長字符串的長度
- 19. Python:binascii.a2b_hex給出「奇數長度字符串」
- 20. 設置最大。大小,最大整型數和最大字符串長度
- 21. 基於字節而非長度的字符串長度驗證
- 22. 如何找到最長的字符串長度節點值
- 23. 如何從一個始終具有相同長度的字符串中獲取最大字節數組長度?
- 24. 字符串容器大小,計算給定最大高度的最小寬度
- 25. 從給定字符生成等長的固定長度的隨機字符串
- 26. Solr的字符串字段的最大長度
- 27. 字符串的長度比字符串的長度長
- 28. 輸入到gmp整數的字符串的最大長度?
- 29. 字符串字段的最大允許長度
- 30. windows工作流參數的最大字符串長度?
「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