[MySQL] Where-Abfrage mit Sonderzeichen (Case Sensitive Probs...)

topfkanne

♪ ♫
ID: 80534
L
20 April 2006
1.578
159
Hallo!

Ich übergebe über die URL einige Variablen, zb. Oeffentliche_veRANstaLtung
Bei dieser wird dann der Unterstrich wieder rausgenommen und die Sonderzeichen (ä,ö,...) werden ersetzt.

Vor der Abfrage habe ich dann also Öffentliche veRANstaLtung in einem String stehen.

Die Tabelle hab ich nicht auf Case Sensitive stehen, was eigentlich heißen müsste, dass er den Eintrag finden sollte. Aber wenn das Ö jetzt klein geschrieben wäre, findet er ihn nicht. Auch nicht mit LIKE.

Bei allen anderen Zeichen ist das kein Problem, ob groß oder klein.

Kann mir das wer erklären?
 
Case insensitiv bezieht sich nur auf die Buchstaben A-Z , nicht auf solche deutschen Besonderheiten wie ä,ö und ü. Darum ist auch bei case-insensitiver Einstellung ö ^= Ö
 
Welche collation hast Du genommen? Die hat starken Einfluss auf die Umlautbehandlung.

Siehe z.B. hier für Details zu latin1_german1_ci und latin1_german2_ci oder hier für ein paar Beispiele.

Ob das mit dem case insensitive dann klappt weiß ich allerdings auch nicht.
 
Ich hab einiges ausprobiert, auch das. Hab auch nochmal gegoogelt, aber finde gerade nichts. Bin immer noch dankbar für Ideen : )
 
ne, klappt nicht. der kann die umlaute nicht unterscheiden (klein- und großbuchstabe..) und wandelt die deshalb nicht um - hab ich auch gelesen.
 
öhm, wie ist deine Client-Verbindung encodiert?
Setz mal auf UTF-8, habe gerade mal auf der commandline deutsche Umlaute getestet, da liefen sie auch net, ist auf irgendein latin gestellt, muss gleich mal schauen welches (update ich dann), will nun aber erstmal essen :biggrin:
 
nene, kannst höchstens die Umlaute mit translate() umwandlen


WHERE TRANSLATE(UPPER(spalte)'äöü','ÄÖÜ') = TRANSLATE(UPPER('Öffentliche veRANstaLtung'),'äöü','ÄÖÜ')

MySQL sollte das können, aber ob das dann noch performant ist ??
 
Code:
mysql> SELECT @@collation_connection;
+------------------------+
| @@collation_connection |
+------------------------+
| latin1_swedish_ci      |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT 'ÖUÄ';
+-----+
| TUZ |
+-----+
| TUZ |
+-----+
1 row in set (0.00 sec)
doch doch doch :p


MySQL sollte das können, aber ob das dann noch performant ist ??
auch meine upper-Methode ist ineffizient :biggrin:

Topfkanne, kannst du mal die beiden Select-Befehle ausführen und uns die Werte nennen ?
Nicht per phpMyAdmin ausführen sondern mit deiner PHP-Db-Verbindung.
 
PHP:
Array ( [0] => latin1_swedish_ci [@@collation_connection] => latin1_swedish_ci )

Array ( [0] => ÖUÄ [ÖUÄ] => ÖUÄ )
 
eigentlich ist sie auf utf8_unicode_ci gestellt : /
(wenn ich in der datenbank unter "opationen" nachlese)
 
die angegebene collation, ist die connection nicht die tabelle ;)

aber diese auf utf8 (SET NAMES utf8) zu stellen ist sicherlich keine schlechte idee, wenn deine ganze anwendung scheinbar auf utf-8 beruht