mysql:5977
From: "Cold Winter" <"Cold Winter" <coldwinter@xxxxxxxxxx>>
Date: Thu, 22 Aug 2002 16:09:27 +0900
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」 > > の動 > > > > 作は > > > > > まだ検証していません。 > > > > > よろしくお願いします。 > > > > > > > > >
5976 2002-08-22 14:40 [福元 政明 <fukumoto@] Re: JDBC での INSERT と UPDATE で日本語が ? に化けてしまいます -> 5977 2002-08-22 16:09 ┣["Cold Winter" <coldw] 5978 2002-08-22 16:09 ┗[MURAKAMI Tomokazu <t] 5982 2002-08-22 20:01 ┗[Sumito_Oda <oda@xxxx]