以前は 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 呼び出しを追加するためのいくつかのスマートな正規表現の置換がうまくいく可能性があることはわかっていますが、別の方法を見つけたいと思います)