- PR -

MYSQLをバージョンアップするとWEBアプリがおかしくなる

投稿者投稿内容
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 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文ではエラーになりません。
ちょっとわかりにくい質問で申し訳ないのですが、この質問するにあたって、追加するべき必要な情報からでもいいので教えていただけませんでしょうか。よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-09 12:39
まずは、どんなエラーが出ているのかを書くべきだと思います。
Tk
会議室デビュー日: 2003/11/27
投稿数: 14
投稿日時: 2004-10-09 13:51
こんにちわ

シングルクォーテーションをダブルクォーテーションにしたらどうでしょう?
私のところはこれで解決しましたが・・・

原因は・・・なんでしょう?
暇ができたら調べてみようと思っています
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2004-10-09 16:51
ご返答ありがとうございます。火曜日までは仕事が休みなのでエラーを書くことができませんので、火曜日以降に書ければと思います。Tkサンのおっしゃるようにダブルクォーテーションにしてみようと、エラーを発見した金曜日に、

sql="select * from table1 where text=\"texts\"";

のようにしてやってみましたがだめでした。LINUXでよくやるエスケープシーケンスがそのまま使えればと思ってやり方があってるかどうかもわからずやってみたことではあったのですが、ダブルクォーテーションの中でダブルクォーテーションを使う場合はどのようにしたらよいのでしょうか?
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-10-09 21:45
sql='select * from table1 where text="texts"';

これでもダメ?
Tk
会議室デビュー日: 2003/11/27
投稿数: 14
投稿日時: 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/09/27
投稿数: 71
投稿日時: 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 ]
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 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 '='"

エンコードの問題っぽいなと思うのですが・・・。
どうやって調べたらいいのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)