Ste: Probleme mit Umlauten bei Suche in SQL-DB

Hallo,

ich habe eine mySQL Datenbank. Mit php will ich sie von meiner Seite dynamisch auf bestimmte Begriffe durchsuchen (diese werden per $_GET übergeben und in ein Array geschrieben). Hier ist der SQL-Befehl ($kat[$a] ist das Array)

$sql = 'SELECT * FROM rechnung WHERE Kat LIKE CONVERT(_utf8 ''.$kat[$a].'' USING latin1) COLLATE latin1_swedish_ci';

Das Problem ist nun, dass ich keine Ergebnisse bekomme, wenn ich nach Worten mit Umlauten suche (im Array steht das Wort richtig drin, hab ich schon ausprobiert; auch wenn ich das Array durch ein "Klarwort" z.B. Nüsse ersetze funktioniert es nicht, obwohl definitiv in der DB ein Eintrag Nüsse vorhanden ist).

Kann mir evtl. jemand sagen, woran das liegt und wie ich das lösen kann?
Die übergebenen Suchbegriffe stimmen 1:1 mit den in der Datenbank vorhanden überein...

Danke

  1. Hallo,

    ich habe eine mySQL Datenbank. Mit php will ich sie von meiner Seite dynamisch auf bestimmte Begriffe durchsuchen (diese werden per $_GET übergeben und in ein Array geschrieben). Hier ist der SQL-Befehl ($kat[$a] ist das Array)

    $sql = 'SELECT * FROM rechnung WHERE Kat LIKE CONVERT(_utf8 ''.$kat[$a].'' USING latin1) COLLATE latin1_swedish_ci';

    dieses Konstrukt sieht wüst aus und enthält einen elementaren Fehler.

    Der elementare Fehler:
    Benutzereingaben sind gemäß dem Kontext zu behandeln, in dem sie verwendet werden. Hier ist das der Kontext MySQL, also verwende mysql_real_escape_string(). Gegebenenfalls solltest Du zu Beginn Deines Skriptes die unsäglichen Magic Quotes eliminieren (falls Du Dich auf die verlässt), siehe entsprechender Link auf der verlinkten Handbuchseite.

    Zum Rest:
    Du solltest wissen, in welcher Kodierung Deine Daten in der entsprechenden Spalte gespeichert sind. Verwende diese Kodierung, um die Daten abzufragen. Konvertiere nicht wild umher.

    Freundliche Grüße

    Vinzenz

    1. echo $begrüßung;

      Du solltest wissen, in welcher Kodierung Deine Daten in der entsprechenden Spalte gespeichert sind. Verwende diese Kodierung, um die Daten abzufragen. Konvertiere nicht wild umher.

      Auch MySQL möchte wissen, in welcher Kodierung die Daten vorliegen, die es bekommt. Es wird gern unterschlagen dies explizit mitzuteilen. Für die aktuelle Verbindung kann man die Funktion mysql(i)_set_charset() oder als Ersatz ein SET NAMES-Statement verwenden.

      echo "$verabschiedung $name";