Frage

Wir portieren eine App, die früher OpenBase 7 verwendet hat, um MySQL 5.0 jetzt zu verwenden.

OB 7 hatte ein ziemlich schlecht definiertes (dh undokumentiertes) Verhalten in Bezug auf Fallsensitivität. Wir haben das nur herausgefunden, wenn wir dieselben Abfragen mit MySQL ausprobieren.

Es scheint, dass OB 7 Suchvorgänge mit "=" unterschiedlich von denen behandelt, die "wie" verwendeten: Wenn Sie zwei Werte "a" und "a" haben und eine Abfrage mit f = "a" machen, findet es nur das " ein "Feld, nicht das" A "Feld. Wenn Sie jedoch wie anstelle von "=" verwenden, findet es beide.

Unsere Tests mit MySQL zeigten, dass, wenn wir eine nicht-binäre Zusammenfassung (z. B. Latin1) verwenden, sowohl "=" als auch "Gefällt mir" Fall-Insidensität vergleichen. Um das Verhalten von OB zu simulieren, müssen wir nur "=" bekommen, um fallempfindlich zu sein.

Wir versuchen jetzt herauszufinden, wie wir in MySQL damit umgehen können, ohne dass alle unsere Abfragen viele Funktionen von Lower () hinzufügen müssen (es gibt viel!).

Wir haben die vollständige Kontrolle über die MySQL -DB, was bedeutet, dass wir den Kollationsmodus nach wie vor auswählen können (unsere Tabellennamen und eindeutigen Indizes sind zum Glück nicht von den Fallsensitivitätsproblemen betroffen).

Gibt es Vorschläge, wie man das OpenBase -Verhalten auf MySQL mit der geringsten Menge an Codeänderungen simuliert?

(Mir ist klar, dass ein paar intelligente Regex -Ersetzungen in unserem Quellcode, um die niedrigeren Anrufe hinzuzufügen, den Trick ausführen könnten, aber wir würden lieber einen anderen Weg finden.)

War es hilfreich?

Lösung

Eine andere Idee. Bietet MySQL so etwas wie benutzerdefinierte Funktionen? Sie können dann eine UDF-Version von Like This Is Case Issitive (ci_like oder so) schreiben und alle ähnlichen in ci_-like ändern. Wahrscheinlich einfacher zu tun, als einen Anruf zu richten, um zu senken.

Andere Tipps

Diese beiden Artikel sprechen über Fallsensitivität in MySQL:

Beide waren frühe Hits in dieser Google -Suche:

Ich weiß, dass dies nicht die Antwort ist, nach der Sie suchen. Aber wenn Sie dieses Verhalten behalten möchten, sollten Sie es nicht explizit codieren (anstatt einige magische "Konfiguration" irgendwo zu ändern)?

Es ist wahrscheinlich eine ziemlich gute Arbeit, aber zumindest würden Sie kennt Welche Bereiche Ihres Codes sind betroffen.

Ein kurzer Blick in den MySQL -Dokumenten scheint darauf hinzuweisen, dass MySQL genau so macht:

Dies bedeutet, dass Sie, wenn Sie mit col_name wie "a%" suchen, alle Spaltenwerte erhalten, die mit einem oder a beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top