mysql:5980
From: 福元 政明 <福元 政明 <fukumoto@xxxxxxxxxx>>
Date: Thu, 22 Aug 2002 19:08:33 +0900
Subject: [mysql 05980] Re: JDBC での INSERT と UPDATE で日本語が ? に化けてしまいます
福元です。お世話になります。 下記のように、うまくいきました、と書きましたが 実は「\」と「'」を入力し登録すると、MySQLにおいて更新エラーが発生していま す。 あたりまえのような話で恐縮なのですが、 SQL文の記述などで逃げることはできないのでしょうか? なみに MS-ACCESS であれば「\」ではエラーとなりませんでした。 以上、よろしくお願いいたします。 > -----Original Message----- > From: 福元 政明 [SMTP:fukumoto@xxxxxxxxxx] > Sent: Thursday, August 22, 2002 4:57 PM > To: ml@xxxxxxxxxx > Subject: [mysql 05979] Re: JDBC での INSERT と UPDATE で日本語 > が ? に化けてしまいます > > Cold Winter様、村上様、ありがとうございました。 > とりあえず「ー」の問題も解決しました。 > ポイントは接続文字列中の &useUnicode=true&characterEncoding=Shift_JIS でし > た。 > なぜか Windows では、SJIS と Shift_JIS は異なるもののような気がします。 > TOMCATの使用かもしれませんが..... > ところで、PreparedStatemennte を使用しても、executeQuery で > sta = con.prepareStatement(new String(p1.getBytes("8859_1"),"Shift_JIS")); > としてやらないとうまく日本語を渡せないようです。 > とりあえず、MS-ACCESSでもMSDEでもMySQLでもうまくいきました。 > ありがとうございました。 > > > -----Original Message----- > > From: Cold Winter [SMTP:coldwinter@xxxxxxxxxx] > > Sent: Thursday, August 22, 2002 4:09 PM > > To: ml@xxxxxxxxxx > > Subject: [mysql 05977] Re: JDBC での INSERT と UPDATE で日本語が > > ? に化けてしまいます > > > > > ところで質問ですが、なぜ PreparedStatement でうまくいったのか? > > > 私の頭ではピントきません。 > > > よろしければご指導の程お願い致します。 > > > > …PostgreSQL のものなのですが,JDBC ドライバのソースを見ると, > > PreparedStatement.setString() の処理の中で↓のように '\' の処理 > > をして,文字化けを起さないようにしているようですね。 > > > > −−−−−−−−−−−−−−−−−−−−−−−−− > > public void setString(int parameterIndex, String x) throws SQLException > > { > > // if the passed string is null, then set this column to null > > if (x == null) > > setNull(parameterIndex, Types.OTHER); > > else > > { > > // use the shared buffer object. Should never clash but this makes > > // us thread safe! > > synchronized (sbuf) > > { > > sbuf.setLength(0); > > int i; > > > > sbuf.append('\''); > > for (i = 0 ; i < x.length() ; ++i) > > { > > char c = x.charAt(i); > > if (c == '\\' || c == '\'') > > sbuf.append((char)'\\'); > > sbuf.append(c); > > } > > sbuf.append('\''); > > set(parameterIndex, sbuf.toString()); > > } > > } > > } > > −−−−−−−−−−−−−−−−−−−− > > > > > > > > ----- Original Message ----- > > From: "福元 政明" <fukumoto@xxxxxxxxxx> > > To: <ml@xxxxxxxxxx> > > Sent: Thursday, August 22, 2002 2:40 PM > > Subject: [mysql 05976] Re: JDBC での INSERT と UPDATE で日本語が ? に化 > け > > てしまいます > > > > > > > ご指導ありがとうございます。 > > > さっそく実行してみました。 > > > 私の理解不足が影響しているせいか、結局 > > > PreparedStatement(入力SQLのSJIS変換なしで) > > > を使ってみたらうまくいきました。 > > > ただ「−」とかの漢字が文字化けするようです。 > > > なぜだろう? > > > ちなみに、gweMysql JDBC Driver に対しても > > > 以下のようにトライしましたが欠局うまくいかずあきらめました。 > > > 1、mysql-connector-java-2.0.14.zipをダウンロード > > > 2、解凍したmysql-connector-java-2.0.14-bin.jarをlibに配置 > > > 3、接続のClass.forName("com.mysql.jdbc.Driver").newInstance();の部分 > を > > 変更 > > > ところで質問ですが、なぜ PreparedStatement でうまくいったのか? > > > 私の頭ではピントきません。 > > > よろしければご指導の程お願い致します。 > > > 以上 > > > > > > > -----Original Message----- > > > > From: Cold Winter [SMTP:coldwinter@xxxxxxxxxx] > > > > Sent: Thursday, August 22, 2002 12:05 PM > > > > To: ml@xxxxxxxxxx > > > > Subject: [mysql 05975] Re: JDBC での INSERT と UPDATE で日本語が > ? > > > > に化けてしまいます > > > > > > > > > SQL のエンコードに「8859_1 → Shift_JIS」の変換を "かけないで"実行 > し > > てみ > > > > たら > > > > > 「あいうえお」と入力したら「BDFHJ」と帰ってきました。 > > > > > > > > …そうですか…,となると,次の方法で回避することになると思います。 > > > > > > > > 1."gweMysql JDBC Driver" > > (http://www.t3-jpn.com/jdbc/jdbcmysql.html)を > > > > 使ってみる(過去ログ "[mysql 05893]") > > > > > > > > 2.PreparedStatement を使ってみる(過去ログ "[mysql 05889]") > > > > > > > > 3.MySQL DB エンジンそのものを Shift_JIS でコンパイルしなおす > > > > (過去ログ "[mysql 05900]") > > > > > > > > > > > > > > > > > > > > > > > > ----- Original Message ----- > > > > From: "福元 政明" <fukumoto@xxxxxxxxxx> > > > > To: <ml@xxxxxxxxxx> > > > > Sent: Thursday, August 22, 2002 11:55 AM > > > > Subject: [mysql 05973] Re: JDBC での INSERT と UPDATE で日本語が ? > に > > 化け > > > > てしまいます > > > > > > > > > > > > > お返事ありがとうございました。 > > > > > ちなみに、 > > > > > SQL のエンコードに「8859_1 → Shift_JIS」の変換を "かけないで"実行 > し > > てみ > > > > たら > > > > > 「あいうえお」と入力したら「BDFHJ」と帰ってきました。 > > > > > とりあえずご報告まで。 > > > > > > > > > > > -----Original Message----- > > > > > > From: Cold Winter [SMTP:coldwinter@xxxxxxxxxx] > > > > > > Sent: Thursday, August 22, 2002 11:44 AM > > > > > > To: ml@xxxxxxxxxx > > > > > > Subject: [mysql 05972] Re: JDBC での INSERT と UPDATE で日本語 > が > > ? > > > > > > に化けてしまいます > > > > > > > > > > > > 福元さん,はじめまして。 > > > > > > > > > > > > > 接続文字列では、 > > > > > > > jdbc:mysql:///master1?useUnicode=true&characterEncoding=SJIS > > > > > > > UpdateCount = sta.executeUpdate(new > > > > > > > String(p1.getBytes("8859_1"),"Shift_JIS")); > > > > > > > のようにきちんとSJIS変換しているつもりなのですが > > > > > > > INSERTとUPDATEを行うと、「あ」のような日本後全てが「?」となっ > て > > > > > > > データベースに格納されているようです。 > > > > > > > > > > > > …次のような点を考慮してみるとよいかもしれません。 > > > > > > > > > > > > 1.SQL のエンコードに「8859_1 → Shift_JIS」の変換を "かけない > で" > > > > > > そのまま実行する > > > > > > > > > > > > 2.DB エンジンの起動状態のうち,キャラクターセットの設定を確認 > す > > る > > > > > > > > > > > > # 確認方法 > > > > > > > > > > > > "C:\work\> mysqladmin variables" ででてくる表の > > character_set > > > > > > の行が "sjis" であることを確認する,念の為 character_sets > に > > > > > > "sjis" が含まれていることも確認する > > > > > > > > > > > > > > > > > > > > > > > > ----- Original Message ----- > > > > > > From: "福元 政明" <fukumoto@xxxxxxxxxx> > > > > > > To: <ml@xxxxxxxxxx> > > > > > > Sent: Thursday, August 22, 2002 11:38 AM > > > > > > Subject: [mysql 05971] JDBC での INSERT と UPDATE で日本語が ? > に > > 化け > > > > てし > > > > > > まいます > > > > > > > > > > > > > > > > > > > 福元と申します。 > > > > > > > 環境は、Win2K + JDK1.4 + TOMCAT4.18です。 > > > > > > > 実はタイトルのような不具合で悩んでおります。 > > > > > > > 処理的には > > > > > > > WEB-INF/lib/mm.mysql-2.0.13-you-must-unjar-me.jar > > > > > > > 接続文字列では、 > > > > > > > jdbc:mysql:///master1?useUnicode=true&characterEncoding=SJIS > > > > > > > UpdateCount = sta.executeUpdate(new > > > > > > > String(p1.getBytes("8859_1"),"Shift_JIS")); > > > > > > > のようにきちんとSJIS変換しているつもりなのですが > > > > > > > INSERTとUPDATEを行うと、「あ」のような日本後全てが「?」となっ > て > > > > > > > データベースに格納されているようです。 > > > > > > > なみに、mysqlコマンドでINSERT文を実行したレコードについては、 > 読 > > み込 > > > > んだ > > > > > > 際に > > > > > > > も○きちんと日本語表示されます。 > > > > > > > なみに、本メーリングリストで紹介されていました > > 「PreparedStatement」 > > > > の動 > > > > > > 作は > > > > > > > まだ検証していません。 > > > > > > > よろしくお願いします。 > > > > > > > > > > > > > > >
-> 5980 2002-08-22 19:08 [福元 政明 <fukumoto@] Re: JDBC での INSERT と UPDATE で日本語が ? に化けてしまいます 5981 2002-08-22 19:37 ┗["Cold Winter" <coldw] 5983 2002-08-22 20:59 ┗["TAKAHASHI, Tomohiro]