like
と=
の異なる動作を理解したいと思います。残念ながら、次の簡単な例を再現できないため、両方のクエリが異なる結果を返します。
SELECT 'ä' LIKE 'ae' COLLATE "de_DE.utf8";
SELECT 'ä' = 'ae' COLLATE "de_DE.utf8";
どちらもfalse
を返します。
何が悪いのですか?
PostgreSQLはLIKE
で=
またはCOLLATE
をサポートしていません。これは、内部的にインデックスの順序付けが=
を使用しているため、照合でそれらが等しいことが返された場合でも、PostgreSQLはバイナリの等しいにフォールバックするためです。 これは文書化されています
このシステムでは、「大文字と小文字を無視する」または「アクセントを無視する」などの照合を作成できます(ksキーを使用)が、現時点では、PostgreSQLは大文字と小文字やアクセントを区別しない方法でこのような照合を実行できません。照合に従って等しいと比較されても、バイト単位で等しくない文字列は、バイト値に従ってソートされます。
PostgreSQLは、文字クラスでのUnicode照合もサポートしていません。