簡體   English   中英

給定字節數的最大字符串長度

[英]Maximum string length for given number of bytes

我需要驗證將作為VARCHAR2(4000 bytes)列存儲在數據庫中的String值的最大長度。 我應該選擇什么最大長度? 我假設使用2000,因為Java String是用UTF-16編碼的,但是我缺少什么嗎? 是否有2000個字符的字符串占用4000多個字節的情況?

不, Java中的2000個字符的String不能接受超過4000個字節的字符數據。 您可能偶爾會聽到它說UTF-16是可變長度編碼,因為它可能需要2或4個字節來表示Unicode代碼點。 盡管這是正確的,但它無關緊要,因為Java的“字符”不是Unicode代碼點,而是UTF-16代碼單元,始終為2個字節。 因此, Java中的2000個字符的字符串恰好是4000個字節的UTF-16數據。

切線警告:根據您對VARCHAR2的使用,在我看來您正在使用Oracle數據庫。 Oracle有兩個主要的字符集設置,即數據庫字符集和國家字符集。 第一個由VARCHAR2列使用(除其他外),另一個由NVARCHAR2列使用(除其他外)。 不支持將 UTF-16用作數據庫字符集,但將其用於國家字符集。 我不知道您的數據層是什么樣子,所以我不能說這將如何影響您,但是您可以閱讀有關字符集的Oracle文檔以獲取更多信息。

綜上所述,在Java中,一個2000個字符的字符串最終可能在其他地方超過4000個字節–如果在此過程中的某個地方,它將轉換為其他編碼。

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

這是您可以用來測試的示例代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM