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

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]