- - PR -
MYSQLをバージョンアップするとWEBアプリがおかしくなる
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-10-09 09:56
いつもお世話になります。J2SDK1.4.2_05、ECLIPSE、TOMCAT5.0.28、MYSQL4.1.5-gammaを使用しています。
本来ならばソースをコピペすれば皆様にも伝わりやすいのかと思うのですが、ちょっと環境が違うもので、何とか伝わるように書こうと思います。 MYSQL4.0.20では正常に機能していたアプリが、MYSQL4.1.5-gammaにバージョンアップしたらsqlエラーが出てしまいます。調べてみると、 select * from table1 where text='texts' こんな感じのSQL文で、シングルクォーテーションを使っている(文字列を扱う)もののみエラーが出てしまいます。でも、情報を追加するINSERT文ではエラーになりません。 ちょっとわかりにくい質問で申し訳ないのですが、この質問するにあたって、追加するべき必要な情報からでもいいので教えていただけませんでしょうか。よろしくお願いします。 |
|
投稿日時: 2004-10-09 12:39
まずは、どんなエラーが出ているのかを書くべきだと思います。
|
|
投稿日時: 2004-10-09 13:51
こんにちわ
シングルクォーテーションをダブルクォーテーションにしたらどうでしょう? 私のところはこれで解決しましたが・・・ 原因は・・・なんでしょう? 暇ができたら調べてみようと思っています |
|
投稿日時: 2004-10-09 16:51
ご返答ありがとうございます。火曜日までは仕事が休みなのでエラーを書くことができませんので、火曜日以降に書ければと思います。Tkサンのおっしゃるようにダブルクォーテーションにしてみようと、エラーを発見した金曜日に、
sql="select * from table1 where text=\"texts\""; のようにしてやってみましたがだめでした。LINUXでよくやるエスケープシーケンスがそのまま使えればと思ってやり方があってるかどうかもわからずやってみたことではあったのですが、ダブルクォーテーションの中でダブルクォーテーションを使う場合はどのようにしたらよいのでしょうか? |
|
投稿日時: 2004-10-09 21:45
sql='select * from table1 where text="texts"';
これでもダメ? |
|
投稿日時: 2004-10-09 22:22
コブラさんの案は私も手元に環境がないので試していませんが・・・
この際PreparedStatementに対応させてはどうでしょうか? メリットや手法は@ITで何度か紹介されてます http://www.atmarkit.co.jp/fjava/rensai2/jspservlet10/jspsevlet10_2.html http://www.atmarkit.co.jp/fjava/javatips/025jspservlet016.html |
|
投稿日時: 2004-10-10 06:35
[table1,texts 共に値]
String sql = "select * from table1 where text= \'texts\'"; String sql = "select * from table1 where text= " + "\'texts\'"; [table1,texts 共に変数] String sql = "select * from " + table1 + " where text= " + "\'" + texts + "\'"; [texts のみ変数] String sql = "select * from table1 where text= " + "\'" + texts + "\'"; ーーー Fedora上問題無し ーーー 画面上円マーク(Linux : 斜線)が消えるので、下の編集をクリックして、そこからコピー。 [ メッセージ編集済み 編集者: 未記入 編集日時 2004-10-10 06:47 ] |
|
投稿日時: 2004-10-11 09:26
おはようございます。ちょっと試す機会があったので、エラーメッセージを載せます。
シングルクォーテーション、ダブルクォーテーション、prepareStatementを試したのですが、すべて同じエラーが出ます。 /** エラーメッセージ **/ General error message from server: "lllegal mix of collations (ujis_japanese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='" エンコードの問題っぽいなと思うのですが・・・。 どうやって調べたらいいのでしょうか? |
