一連の XML ファイルを解析し、それらから取得した値を MySQL データベースに挿入しています。mysql テーブルの文字セットは utf8 に設定されています。次の接続 URL を使用してデータベースに接続しています -jdbc:mysql://localhost:3306/articles_data?useUnicode=false&characterEncoding=utf8
ユニコード文字を含む文字列値のほとんどは、数学記号を含むものを除いて、問題なく入力できます (ギリシャ文字など)。特に例 - 数学スクリプトの大文字 g (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 文字はすべて疑問符に置き換えられます。
私がそれを修正しようとしている2つの可能な方法があり、どちらもまだ成功していません-
記事を解析するときは、エンコーディングを維持します。xml ファイルを解析するために使用
org.apache.xerces.parsers.DOMParser
していますが、デコードを防ぐ方法がわかりません (関連する XML -<p>𝒢 is a set containing...</p>
)。再エンコードすることはできますが、それは効率が悪いようです。数学記号をデータベースに挿入します。