mysql:5979
From: 福元 政明 <福元 政明 <fukumoto@xxxxxxxxxx>>
Date: Thu, 22 Aug 2002 16:57:10 +0900
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」 > > > の動 > > > > > 作は > > > > > > まだ検証していません。 > > > > > > よろしくお願いします。 > > > > > > > > > > > >
-> 5979 2002-08-22 16:57 [福元 政明 <fukumoto@] Re: JDBC での INSERT と UPDATE で日本語が ? に化けてしまいます 5984 2002-08-23 00:59 ┗[Tomoyuki Ishino <ish]