[前][次][番号順一覧][スレッド一覧]

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]