- ベストアンサー
MySQLでアンダーバーを検索
JDBCを使ってMySQLにアクセスしようと、以下のようなプログラムを書いたのですが、executeQueryでエラーが出てしまいます。 検索したいデータ(100100_0001)に、アンダーバー(_)が入っているので、それが問題であるような気がします。 説明が分かり難くてすいませんが、どなたか助けていただけますでしょうか。 非常に困っております。。。 エラー内容================================================= java.sql.SQLException: General error message from server: "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (sjis_japanese_ci,COERCIBLE) for operation '='" =========================================================== プログラム=========================================================== String a ; String b : String key ; ResultSet rs; a = "100100" ; b = "0001" ; key = a + "_" + b ; //↑これを key = a + "\_" + b ; とすると、「エスケープ文字が不正です」となってコンパイルが通りませんでした sql = "SELECT * from quote_dtl WHERE qd_id = " + "\'" + key + "\'"; rs_dtl = stmt.executeQuery(sql) ; ===========================================================
- みんなの回答 (3)
- 専門家の回答
お礼
基本的な問題でした。 Connection時にSJISを設定していたのですが、それを外したところうまく動きました。 変更前 jdbc:mysql:///RFQ?useUnicode=true&characterEncoding=SJIS 変更後 jdbc:mysql:///RFQ?useUnicode=true ですが、PreparedStatementを使ったほうが何かと便利そうなので、使おうと思います。 どうもありがとうございました。
補足
MySQLで直接打った場合ですが、 select * from quote_dtl WHERE qd_id = 100100_0001 ; と打つと、ERROR 1054 (42S22): Unknown column '100100_0001' in 'where clause' となります。 select * from quote_dtl WHERE qd_id = '100100_0001' ; と打つと、正常にデータがヒットしました。 PreparedStatementを使ったのですが、以下のようなエラーが出てしまいます。 今までのStatementで正常に動いていたところでも以下のエラーが出ます。 何か根本的な問題なのでしょうか。。。 ちなみにコンパイル時には -encoding のオプションはつけてないです。 エラー内容------------------------------------- java.sql.SQLException: General error message from server: "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (sjis_japanese_ci,COERCIBLE) for operation '='" at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278) at com.mysql.jdbc.Connection.execSQL(Connection.java:2251) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586) at RFQ_select.main(RFQ_select.java:53)