mysql:5236
From: "TAKAHASHI, Tomohiro" <"TAKAHASHI, Tomohiro" <t_takahashi@xxxxxxxxxx>>
Date: Wed, 13 Mar 2002 00:41:04 +0900
Subject: [mysql 05236] Re: MySQL + JDBC で SJIS 処理
高橋(智)です。 wolfgang@xxxxxxxxxx wrote: > > >私がメンテしているJDBCドライバであれば対応可能ですよ。 > ありがとうございます。しかし、"文字化けが発生しないようにあらかじめ修正 > を加えたSQL文" ということは、実行するSQLの文字を全てチェック(2byte目に\ > があるかどうか)して、もし\が含まれていたら何かしらの変更を・・・? > 原理的には、実行するSQLの文字だけをチェックするのでしょうか? まず、StatementやPreparedStatementに渡されて来るSQL文はUNICODEですから、 そのUNICODE(String)を シフトJISのバイト配列(byte[])に変換した後に、MySQL サーバへと送信する処理が既に入っています。 で、Statementに直に渡されるSQL文では、バイト配列(byte[])のどの部分の文 字列をチェックしたらよいのか判定が難しい(というか無駄)なので、これはSQL文 を生成する側の責任にしたいですね。(^^; statement.executeQuery("delete from table where a='表\\'"); というように。 次に、PreparedStatementですが、このinterfaceであれば setString(...); というメソッドに全ての処理を集中させられるので楽です。 --- 擬似コード ----- public void setString(int parameterIndex, String x) { if( シフトJISで送信するなら ) { byte[] buf = x.getBytes(encoding); // i.e. "Shift_JIS" buf = add5CAfter5C(buf); // 必要に応じて\を付加する x = new String(buf, 0, buf.length, encoding); } ... } --- 擬似コード ----- 現在、ResultSetにスクロール機能(変更は非検知)を入れ終わってテスト している段階なので、それが終わりしだい実装の検討に入りたいと思います。 (ドライバに渡すプロパティを追加して、それを鈴木様専用フラグとしたい です) これで mm mysql Driver に機能的には肩を並べるハズ。(^^) > それともDBから返されたResultSet(+ RowSet )の中の文字もチェックするのでしょ > うか? 後者なら、DBからの結果が肥大したときに、かなり重くなると思うので > すがどうなんでしょうか? チェックしません。 JDBC Driverが送信するSQL文にのみ問題があるからです。 P.S. さて、明日からパシフィコ横浜でSun Tech Daysが開催されます。 赤いフリースと赤いTシャツとジーパンでうろうろしてますので、 参加される方がいましたら気軽に声をかけてください。 -- 高橋智宏 Java読書会( http://www.t3-jpn.com/bof/ ) T3-Japan( http://www.t3-jpn.com/ )
5224 2002-03-06 03:01 [<wolfgang@xxxxxxxxxx] MySQL + JDBC で SJIS 処理 5226 2002-03-06 19:28 ┗["TAKAHASHI, Tomohiro] 5227 2002-03-08 02:47 ┗[とみたまさひろ <tomm] 5228 2002-03-09 11:23 ┗["TAKAHASHI, Tomohiro] 5229 2002-03-11 02:24 ┗[<wolfgang@xxxxxxxxxx] 5231 2002-03-11 21:59 ┣["TAKAHASHI, Tomohiro] 5232 2002-03-11 22:09 ┗["TAKAHASHI, Tomohiro] 5233 2002-03-12 12:13 ┗[<wolfgang@xxxxxxxxxx] -> 5236 2002-03-13 00:41 ┗["TAKAHASHI, Tomohiro] 5237 2002-03-13 22:44 ┣["TAKAHASHI, Tomohiro] 5245 2002-03-14 18:00 ┗[<wolfgang@xxxxxxxxxx] 5246 2002-03-15 00:02 ┗["TAKAHASHI, Tomohiro]