2012-03-01 26 views
1

我已經分離出我們走入到一個簡單的測試了一個問題:特殊的Unicode字符在MySQL導致異常JDBC

嘗試運行一個LONGTEXT列的類型與參數值 直線上升JDBC插入或更新新的字符串(新字符[] {0xDBFF,0xDC00});發生

例外聲明: 「不正確的字符串值:‘\ XF4 \ X8F \ XB0 \ X80’列」

看來,這兩個字符一起使用時,形成一個有效的中國符號(單獨他們沒有意義)

我該如何處理這些亂七八糟的字符?它們形成一個有效的符號,Character.isDefined對兩個字符都返回true。特別是從所有字符串中除去這些字符代碼看起來像是要求用不同的漢字組合來解決更多的問題。

+0

如果有差別,表已經utf8_bin覈對 – idle 2012-03-01 19:47:33

+0

再往檢查證實,這兩個字符都是一個「代理對」 – idle 2012-03-01 19:55:58

+0

是對JDBC連接器投擲該錯誤信息本身,或者是它來自數據庫?你應該確保你的表被設置爲'CHARSET = utf8',而不僅僅是排序規則,並且確保你在Java代碼中使用了多字節字符串。錯誤消息中的值似乎與'new String' create語句不匹配,這讓我認爲有些編碼正在某處進行。另外,我不太瞭解Java,但通常'0xDBFF'不會是char,因爲char是8位(0xFF或類似的),而0xDBFF是16位。 – 2012-03-01 19:59:23

回答

4

編碼有UFT-8這個字符將導致4個字節:

11110100 10001111 10110000千萬

的MySQL 5.0/5.1不支持4字節UTF8字符,這是已知的限制。 MySQL 5.5確實支持4字節的UTF8字符。

參見9.1.10. Unicode Support

+0

這可以很好地解釋它。我們必須通過剝離那些長的UTF8字符來解決它,直到我們可以升級到最新版本的MySQL。謝謝您的幫助! – idle 2012-03-01 21:20:44