2017-09-01 16 views
0

我試圖確定一個Java程序每天晚上加載MySQL表的錯誤。數據與cedilla - Ç - 在mysql表中

錯誤日誌中爲值java.sql.SQLException:不正確的字符串值: '\ XEF \ XBF \ XBD \ XEF \ XBF \ XBD ...' 列 '經理' 在行1

最後確定數據中有一個新名稱(從平面文件中加載) - FRANÇOIS - 它是發出錯誤的cedilla。程序仍然加載所有內容,只是將該字段留空。當我運行SHOW FULL COLUMNS FOR tablename時,它是latin1_swedish_ci。我對於整理,charsets知之甚少。 我應該如何將排序規則更改爲接受此規則?

回答

0

(要發表評論)

需要查看更多詳細信息。

請勿使用latin1;使用utf8。

連接與在getConnection()通話

使用CHARACTER SET utf8在表和/或列定義?useUnicode=yes&characterEncoding=UTF-8。請提供SHOW CREATE TABLE進行確認。

EFBFBD是「替代」字符,意味着你有垃圾來了。

加載一個文件 - 你能從文件中得到Ç的十六進制嗎?如果是C7它是latin1,你應該在加載時指定latin1。是LOAD DATA?或者是其他東西?

如果是C387那麼它是utf8;好。

更多的討論,調試,最佳實踐等:Trouble with utf8 characters; what I see is not what I stored

術語: 「歸類」(例如,latin1_swedish_ci)是指排序順序。你的問題是「字符集」(例如,latin1或utf8)。

+0

SHOW CREATE TABLE語句顯示它使用了默認字符集,它是latin1。我將不得不驗證是否允許我訪問將該表更改爲uft8,或者如果出於某種原因缺省值爲latin1。 – BigRedEO

+0

這是古老的歷史。最新版本的MySQL默認爲utf8mb4。不過,你可以在每個'VARCHAR'上明確指定'CHARACTER SET ...'。 –

+0

如何更改特定列的字符集?這將是最好的解決方案,因此它不會導致任何其他可能使用同一張表的程序出現問題。 – BigRedEO