Ich versuche eine MySQL Suchabfrage zu erstellen. LIKE
wäre völlig in Ordnung, aber der Kunde will Eingaben mit "oe" finden "ö", "ae" finden "ä" und "ue" finden "ü", wie es in Deutschland recht üblich ist.
Ich versuchte, REGEXP
nach dem Ersetzen jedes Auftretens von "oe" zu (oe|ö)
zu verwenden, aber REGEXP
ist streng und stimmt nicht überein (zum Beispiel) "é" zu "e".
Gibt es eine Möglichkeit LIKE
mit "oe | ue | ae" abzugleichen oder eine andere Möglichkeit, die ich nicht habe?
Danke,
thomasMySQL finde umlaute von "oe", "ae", "ue"
Antwort
Bei Character Sets and Collations Supported by MySQL kann ich nur zwei deutsche Sortierungen vor Ort:
- latin1_german1_ci
- latin1_german2_ci
Es scheint, dass latin1_german2_ci derjenige ist, die Sie wollen, es aber erwartet Latin1:
latin1_german2_ci
(Telefonbuch) Regeln:
- Ä = AE
- Ö = OE
- Ü = UE
- ß = ss
Wenn Ihre Tabelle/Spalte verwendet es nicht bereits, Sie können eine solche Sortierung in der Abfrage selbst erzwingen, zB:
mysql> SELECT _latin1'oe' collate latin1_german2_ci ='ö' AS are_equal;
+-----------+
| are_equal |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)
Wenn Ihre Anwendung Latin1 verwendet, sollte dies den Trick tun. Ansonsten habe ich ehrlich gesagt keine Ahnung :)
Disclaimer: Ich weiß nichts über Deutsch. Möglicherweise gibt es eine andere Sprache, die ähnliche Regeln verwendet.
Danke! Das ist wirklich hilfreich.Leider verwendet unsere Anwendung UTF8 ... – thomas
@thomas Wenn Sie die Möglichkeit haben, dies auf UTF-8 zu testen, teilen Sie uns Ihre Erfahrungen mit. Wie gesagt, ich weiß nicht wirklich, dass MySQL gemischte Codierungen verarbeitet. –
Ich bekomme einen Fehler "illegale Mischung von Sortierungen". Wie Sie gesagt haben, erwartet latin_german2_ci latin1 Zeichen. – thomas
Wenn Sie utf8 verwenden, ist COLLATE utf8_german2_ci
erforderlich. Siehe collation chart (Und nach diesem Diagramm, german2
die einzige ist, Ihre Bedürfnisse zu befriedigen.)
mysql> SELECT "oe" = "ö" COLLATE utf8_german2_ci;
+-------------------------------------+
| "oe" = "ö" COLLATE utf8_german2_ci |
+-------------------------------------+
| 1 |
+-------------------------------------+
Es ist jedoch wesentlich effizienter ist die Spalte (n) zu erklären COLLATE utf8_german2_ci
zu sein, als diese Klausel zu verwenden, in Vergleichen.
(Wenn Sie utf8mb4 verwenden, ändern Sie die Schreibweise entsprechend.)
- 1. jQuery: AJAX Umlaute & Sonderzeichen sind ein Chaos
- 2. Ersetzen Sie Umlaute (Äüö) für SEO-Link in Schienen - bester Weg
- 3. os x Prozessstatus UE
- 4. Unterstützt HDFS Sonderzeichen (Umlaute, etc ..)?
- 5. Wie ersetzt man Unicode-Zeichen durch ASCII-Zeichen in Python (Perl-Skript gegeben)?
- 6. Umlaute und Slices
- 7. python: lower() deutsche Umlaute
- 8. DCPcrypt Hashing deutsche Umlaute
- 9. Node.js Anfrage dreht Umlaute
- 10. Laden Sie 3D-Modelle mit JPCT-AE
- 11. Laravel Url Validierung Umlaute
- 12. Warum ergibt `` aeee.gsub (/ (ae) * /, 'r') `` rrerer '`?
- 13. Umlaute in deutscher Sprache in Datenbank speichern
- 14. Visitenkarte Anerkennung nicht sehen Umlaute
- 15. Ersetzen von Umlauten in JS
- 16. Difference Firefox - Chrome, wenn Umlaute
- 17. Python String Cleanup + Manipulation (Umlaute)
- 18. Wo finde ich das MySQL-Transaktionsprotokoll?
- 19. Ligaturen und Umlaute in Sphinx Suche
- 20. Wie werden Umlaute mit regulären Ausdrücken verglichen?
- 21. NSXMLParser zerlegt Umlaute (ä, ö, ü)
- 22. Charset UTF-8 zeigt keine Umlaute
- 23. Umlaute im Regexp-Abgleich (via locale?)
- 24. Warum sortiert der Sortierbefehl "œ" und "oe" im französischen Gebietsschema?
- 25. Querying für ae passt æ in SQL Server/LINQ
- 26. Wie ersetze ich Akzente (Deutsch) in .NET
- 27. So verwenden Sie Umlaute mit der URI-Bibliothek von Ruby
- 28. Wie kann ich Diakritika (Umlaute) von einem String entfernen?
- 29. Codierung von Umlaute in Jsoup mit merkwürdigem Verhalten
- 30. Wo finde ich mysql logs in phpmyadmin?
Wow, das war schnell. Downvoted bevor ich fertig war ... :( – thomas
Wahrscheinlich erwägen Sie, in eine Suchmaschine wie Solr zu investieren. – apokryfos
Tipp: set utf8_general in mysql dann 'e' findet' è' http://stackoverflow.com/questions/2344118/utf -8-general-bin-unicode – JustOnUnderMillions