私たちの目標は、SQLite データベースの大文字と小文字を区別しない照合を作成することです。複数のプラットフォームでこれを行いましたが、iOS には一貫した問題があり、(時折) 破損した DB インデックスに現れるようです。長い実験の結果、問題の原因は CFStringCompare() 関数であり、理論上の規則に違反していると結論付けました。
ACC。理論的には、比較関数は再帰的、対称的、および推移的でなければなりません。
私たちが行ったことは、ランダムな文字列を生成し、CFStringCompare() が上記のプロパティを満たすかどうかをテストすることでした。
サンプルの問題は次のとおりです。
"Я7;1FC9" > "SДA`\"0l"
"SДA`\"0l" > "Я7;1FC9"
つまり、A>B と同時に B>A!
より多くのフラグの組み合わせをテストしました:
- kCFCompareNonliteral は同様の問題を示しました
- kCFCompareLocalized は最悪のオプションであることが証明されています (ほとんどの問題)
iOSで大文字と小文字を区別しない比較を実現する安全な方法を知っている人はいますか?