我解析了一堆XML文件,並將從它們獲得的值插入到MySQL數據庫中。 mysql表的字符集設置爲utf8。我使用以下連接url連接到數據庫 - jdbc:mysql://localhost:3306/articles_data?useUnicode=false&characterEncoding=utf8
從XML解析,插入到mysql;字符給java.sql.SQLException:錯誤的字符串值
帶有Unicode字符的大多數字符串值都輸入正確(像希臘字母等),但有些數字符號除外。一個特別的例子 - 當我試圖插入一個字符串與數學腳本大寫g(img在www.ncbi.nlm.nih.gov/corehtml/pmc/pmcents/1D4A2.gif)(http://graphemica.com/) (試圖解析並插入this文章),我得到下面的異常 -
java.sql.SQLException: Incorrect string value: '\xF0\x9D\x92\xA2 i...' for column 'text' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949)
如果我改變我的連接網址 - JDBC的:mysql://本地主機:3306/articles_data,然後在插入的作品,但所有常規的UTF8字符被替換爲問號。
有兩種可能的方法,我試圖修復它,並在要麼沒有成功,但 -
當解析文章,保持編碼。我使用
org.apache.xerces.parsers.DOMParser
解析XML文件,但無法弄清楚如何防止解碼(相關的XML -<p>𝒢 is a set containing...</p>
)。我可以重新編碼它,但這似乎效率低下。將數學符號插入到數據庫中。
請檢查您的xml文件的編碼。那是UTF-8嗎?你的應用程序在哪個操作系統上運行? – powerMicha
爲什麼在網址中useUnicode = false? –
@Alex:我首先嚐試了'useUnicode = true',但沒有什麼區別。我把它變成了錯誤,期望它不會強制嘗試將它作爲utf8字符插入,並會回退到不喜歡它的問號。 @powerMicha:我現在正在Windows上測試它。 XML頭沒有提供關於文件編碼的任何信息,但是當我解析它時,它將編碼的字符轉換爲(我假設)UTF-8。我假設,因爲如果我stdout分析的字符串,並在NP + UTF-8編碼看它,它看起來是正確的。 –