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

mysql:5981

From: "Cold Winter" <"Cold Winter" <coldwinter@xxxxxxxxxx>>
Date: Thu, 22 Aug 2002 19:37:41 +0900
Subject: [mysql 05981] Re: JDBC での INSERT と UPDATE で日本語が ? に化けてしまいます

> 実は「\」と「'」を入力し登録すると、MySQLにおいて更新エラーが発生していま
> す。
> あたりまえのような話で恐縮なのですが、
> SQL文の記述などで逃げることはできないのでしょうか?

…データの文字列フィールドに与える値として円マーク(\)やシングルクォーテー
ション(')が必要だということなんですよね…,

もしそうなら,PreparedStatement.setString() で設定する文字列の文字をそれぞれ
精査して,「\ → \\」 / 「' → \'」などと変換するしかないかもしれません。

もしそうでないのなら,PreparedStatement に与える SQL 文の内容を↓みたいに
シングルクォーテーションで括っておくとよいかもしれません。

-----------------------------------
strMojiretsu1 = "いろいろ\いろいろ'いろいろ";
intKazu2 = 0;
intKazu3 = 0;
try
{
    Connection cont = DriverManager.getConnection(…);
    PreparedStatement prpStmt = cont.prepareStatement("insert into table1 values('?', ?, ?)");
    prpStmt.setString(1, strMojiretsu1);
    prpStmt.setInt(2, intKazu2);
    prpStmt.setInt(3, intKazu3);
    prpStmt.execute();
}
catch (Exception ee)
{
    /* エラー処理 */
}
-----------------------------------



----- Original Message -----
From: "福元 政明" <fukumoto@xxxxxxxxxx>
To: <ml@xxxxxxxxxx>
Sent: Thursday, August 22, 2002 7:08 PM
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]