3

以前は Openbase 7 を使用していたアプリを、MySQL 5.0 を使用するように移植しています。

OB 7 では、大文字と小文字の区別に関してかなり不適切に定義された (つまり、文書化されていない) 動作がありました。これは、MySQL で同じクエリを試したときに初めてわかりました。

OB 7 は、「=」を使用したルックアップを「LIKE」を使用したルックアップとは異なる方法で処理しているようです。「a」と「A」の 2 つの値があり、WHERE f="a" でクエリを作成すると、「」のみが検出されます。 「A」フィールドではなく、「a」フィールド。ただし、「=」の代わりに LIKE を使用すると、両方が検出されます。

MySQL でのテストでは、非バイナリ照合 (latin1 など) を使用している場合、"=" と "LIKE" の両方が大文字と小文字を区別せずに比較されることが示されました。ただし、OB の動作をシミュレートするには、大文字と小文字を区別する "=" のみを取得する必要があります。

現在、すべてのクエリに大量の LOWER() 関数呼び出しを追加せずに、MySQL でこれを処理する方法を見つけようとしています (たくさんあります!)。

MySQL DB を完全に制御できます。つまり、照合モードを好きなように選択できます (幸いなことに、テーブル名と一意のインデックスは大文字と小文字の区別の問題の影響を受けません)。

最小限のコード変更で MySQL で OpenBase の動作をシミュレートする方法について何か提案はありますか?

(ソースコードに LOWER 呼び出しを追加するためのいくつかのスマートな正規表現の置換がうまくいく可能性があることはわかっていますが、別の方法を見つけたいと思います)

4

4 に答える 4

2

別のアイデア.. MySQLはユーザー定義関数のようなものを提供していますか? 次に、大文字と小文字を区別しない like の UDF バージョン (ci_like など) を記述し、すべての like を ci_like に変更できます。Lower in .. への呼び出しを正規表現するよりもおそらく簡単です。

于 2009-01-29T18:50:34.717 に答える
0

次の 2 つの記事では、mysql での大文字と小文字の区別について説明しています。

両方とも、この Google 検索で初期にヒットしました。

于 2008-12-18T15:17:38.977 に答える
0

これはあなたが探している答えではないことはわかっています..しかし、この動作を維持したい場合は、明示的にコード化する必要はありません(どこかで魔法の「構成」を変更するのではなく)?

おそらくかなりの作業が必要ですが、少なくともコードのどの領域が影響を受けるかを知ることができます。

于 2009-01-28T07:01:06.243 に答える