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

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]