1

クエリを自動的に組み立てる従来の PHP フレームワークを使用しています。何らかの理由で、次のようなクエリを組み立てています。

SELECT s.status,c.client FROM client C LEFT JOIN status S ON C.id_status=S.id_status'

これは、私の MacOS X ワークステーションでは問題になりません。しかし、実稼働サーバー mysql でテストすると、次のエラーが発生します。

#1054 - Unknown column 's.status' in 'field list' 

それは間違いなく s.status のケースの問題です。S,C の s,c を変更するクエリを手動で実行すると、完全に機能します。

Google をざっと見ても問題は解決しませんでした。何か案は?

4

2 に答える 2

1

まあ、それはドキュメントで言われています:

デフォルトでは、テーブル エイリアスは Unix では大文字と小文字が区別されますが、Windows や Mac OS X では区別されません。次のステートメントは、エイリアスを a と A の両方で参照するため、Unix では機能しません。

mysql> SELECT col_name FROM tbl_name AS a
    -> WHERE a.col_name = 1 OR A.col_name = 2;

ドキュメントのこのセクションにもいくつかの解決策が示されています。たとえば、すべてのプラットフォームで を設定lower_case_table_names1て、名前を強制的に小文字に変換することができますが、その場合、すべてのテーブルの名前も小文字に変更する必要があります。

于 2012-10-03T22:17:53.517 に答える
0

MySQL のテーブルはファイルとして保存されます。ファイル名は、MacOS X と Windows では大文字と小文字が区別されませんが、Linux では大文字と小文字が区別されます。MacOS X と Windows では大文字と小文字を区別せずにテーブル名を使用できますが、Linux では使用できません。そのため、すべてのテーブル名に一貫した大文字小文字を選択し、コード全体で使用する必要があります。

tbl_etc大文字と小文字を区別しないように、すべて小文字または大文字の名前をMY_TBLなどのアンダースコアで区切って使用することをお勧めします。

于 2012-10-03T22:18:51.783 に答える