2012-11-08 21 views
1

我正在使用MySQL數據庫版本14.14 Distrib 5.5.21,用於Linux(x86_64)。我使用java類中的預準備語句將字符串保存到此數據庫中。在MySql數據庫中測試編碼和字符串的正確性

現在我想確保我保存的所有字符串都是UTF-8格式,並且不包含中斷(如數據庫創建模式中定義的)字符。因爲它已經發生,字符串被破壞,因此包含問題標籤,而不是應該在那裏的字符。在我的情況下,它顯示「R ckenschmerzen」而不是「Rückenschmerzen」。德語字符「ü」被打破。 是否有可能通過JUnit測試找到這樣的錯誤?

任何幫助,將不勝感激。先謝謝你。 賀拉斯

+0

你如何區分字符串破損或不? –

+0

*「...幷包含不破碎...」*包含什麼破碎?碼點序列? –

+0

@ T.J. Crowder:破碎的字符。 – Horace

回答

0

默認情況下MySql數據庫配置爲使用latin1字符集,但你可以改變,在my.ini

# The default character set that will be used when a new schema or table is 
# created and no character set is defined 
#default-character-set=latin1 

default-character-set=utf8 

的歸類默認使用的是utf8_general_ci但還有其它歸類,總的「650種語言」的支持,支票手冊。

+0

非常感謝你的信息,羅馬。但我想我問了一個錯誤的問題。正確的問題應該是:如何檢查字符串是否採用有效的UTF-8格式(使用java)?因爲我認爲如果將數據庫設置爲UTF-8,然後錯誤地在其中編寫另一種編碼的字符串,則它將被保存(將替換碼U + FFFD putting用於未知字符)。所以我的解決方案是檢查數據庫中的字符串是否包含U + FFFD或 。 – Horace

+0

[這是更好的答案](http://stackoverflow.com/questions/6622226/check-if-a-string-is-valid-utf-8-encoded-in-java) –

0

@羅曼: 非常感謝你的信息,羅馬。但我想我問了一個錯誤的問題。正確的問題應該是: 如何檢查字符串是否採用有效的UTF-8格式(使用java)?

因爲我覺得,如果你設置你的數據庫爲UTF-8,然後錯誤地做另一種編碼成一個字符串的寫操作,將仍然保存(把替換代碼U + FFFD爲最終未知字符)

所以對我來說,解決辦法是檢查是否在數據庫字符串包含U+FFFD or �.

或者其他預防性的解決辦法是確保在我的字符串中的字符都在UTF-8之前,我把它保存到數據庫中,例如:

String myString = "blablabla"; 
    String finalStringToBeInserted = new String(myString.getBytes(), "UTF-8"); 
    saveToDatabase(finalStringToBeInserted); 

問候,賀拉斯

相關問題