我正在解析一堆 XML 文件并将从它们获得的值插入到 MySQL 数据库中。mysql表的字符集设置为utf8。我正在使用以下连接 url 连接到数据库 -jdbc:mysql://localhost:3306/articles_data?useUnicode=false&characterEncoding=utf8
大多数带有 unicode 字符的字符串值都可以正常输入(如希腊字母等),除了一些带有数学符号的字符串值。特别是一个例子 - 当我尝试插入一个带有数学脚本大写 g 的字符串时(img at www.ncbi.nlm.nih.gov/corehtml/pmc/pmcents/1D4A2.gif)(http://graphemica.com/) (试图解析并插入这篇文章),我得到以下异常 -
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)
如果我将连接 URL 更改为 - jdbc:mysql://localhost:3306/articles_data,则插入有效,但所有常规 UTF8 字符都替换为问号。
我试图修复它有两种可能的方法,但都没有成功 -
解析文章时,保持编码。我
org.apache.xerces.parsers.DOMParser
用来解析 xml 文件,但不知道如何防止它解码(相关 XML -<p>𝒢 is a set containing...</p>
)。我可以重新编码它,但这似乎效率低下。将数学符号插入数据库。