2013-09-05 44 views
0

比方說,我從java.sql.ResultSet.getString(1)獲取一個字符串。並從這個字符串中調用String.getBytes()。java String.getBytes行爲

現在無論查詢結果集的數據庫所使用的字符集是否得到相同的結果?即如果我在不同的數據庫(使用不同的字符集)執行該過程,在調用getBytes之後是否獲得相同的結果?

回答

1

是的。

存儲在數據庫中的字節在字符串中轉換爲Unicode字符。

您將字符串char s轉換爲您指定的任何字節(或系統默認值)作爲字符編碼。

Database bytes -> String chars -> Your bytes 
      DB encoding  Your encoding 

如果事情是在數據庫或者未在數據庫中進行正確解碼字節的JDBC搞砸,該字符串將是錯誤的。例如,如果這些字節是捷克的一些UTF-8編碼,並且它使用一些西方編碼或Windows標準編碼對它們進行解碼,則字符串將是錯誤的。你會看到,如果你打印字符串,因爲重音字符看起來像分數或有趣的字符組合。

但無論進入字符串將根據您指定的字符集進行編碼。

+0

但是無論進入字符串將根據您指定的字符集進行編碼(我沒有指定任何字符集,或者你的意思是我應該調用String.getBytes(String charsetName),而不是?傳遞在字符集中定義的字符集數據庫) –

+0

如果您沒有爲'getBytes'指定字符集名稱,則它將使用默認的字符編碼。你應該指定一個編碼。 –

0

取決於。如果你的數據庫編碼是latin1,但你保存的是字符集之外的東西(utf-8 char),那麼數據庫的編碼將會發揮作用,它會節省giberish的價值。獲取該不良值的字節將不會與原來的相同。

相關問題