Groß/Kleinschreibung bei MySQL "LIKE"?

Atalión

Mitglied
Hallo alle zusammen

Ist schon eine Weile her, dass ich das letzte Mal hier war :)

Derzeit programmier ich an einer Videogalerie und habe dementsprechend eine Suchfunktion eingebaut. Dabei benutze ich "LIKE" im MySQL-Part. Eigentlich sollten jetzt ja Suchwörter unabhängig von Groß-und Kleinschreibung akzeptiert werden, allerdings liefert das Skritp nur Ergebnisse, wenn die Groß- und Kleinschreibung eingehalten wird.

Ich habe die Spalte nicht als Binary gesetzt, eigentlich müsste es funktionieren. Mein Code sieht wie folgt aus:

PHP:
// gucken, ob Suche per POST oder per GET 
if ($_GET['action'] == "search") {
	if (isset($_GET['suche'])) {
		$suche1 = $_GET['suche'];
		$kriterium = "tag";
	} else {
		$suche1 = $_POST['suchwort'];
	}
	
$suche2 = explode(" ",$suche1);
$suchergebnis_anzahl = count($suche2);

if ($_POST['kriterium'] == "titel") {
	$kriterium = "Titel";
} else if ($_POST['kriterium'] == "tag") {
	$kriterium = "tag";
}

// wenn nur ein Suchwort
if ($suchergebnis_anzahl == 1) {
	$where = $kriterium." LIKE '%".$suche2[0]."%'";
}

// wenn mehrere Suchwörter
if ($suchergebnis_anzahl > 1) {

	$where1 = $kriterium." LIKE '%".$suche2[0]."%'";
	$count = 1;
	$mehr_where = "";
	
	while ($count < $suchergebnis_anzahl) {
	$mehr_where = $mehr_where." OR ".$kriterium." LIKE '%".$suche2[$count]."%'";
	$count++;
	}
	
	$where = $where1.$mehr_where;
}

// Suche
	
	$search = array();
	
	$sql = "SELECT
                *,
				DATE_FORMAT(Datum, '%d.%m.%Y') AS Changedatum
            FROM
                hoggytube
			WHERE
				$where
			ORDER BY
				Views";
    
	$result = mysql_query($sql) OR die(mysql_error());
	
	while($row = mysql_fetch_object($result)) {
		array_push($search,$row);
	}
// usw.

Ich weiß nicht, was schief läuft :confused: selbst bei ganz normalen LIKE Abfragen ohne irgendwelche Variablen noch sonstwas funktioniert es nicht :(

Liebe Grüße,
Malte :)
 
Hi
Das liegt am Zeichensatz (genauer an der Sortierreihenfolge) der zu vergleichenden Strings.
Schau mal hier:
SQL:
#Gibt false zurück: (cs=case sensitive)
select CONVERT('abc' USING latin1) like CONVERT('ABC' USING latin1) COLLATE latin1_general_cs;
#Gibt true zurück: (ci=case insensitive)
select CONVERT('abc' USING latin1) like CONVERT('ABC' USING latin1) COLLATE latin1_german1_ci;

Du must also die Sortierreihenfolge deiner Tabellen ändern:
SQL:
ALTER TABLE `mytable` CHARACTER SET latin1 COLLATE latin1_german1_ci;

Gruss & hf
jeipack
 
Hallo

Danke für die Antworten :) Erst hatte es nicht geklappt, war aber meine eigene Doofheit. Hatte nur die Kollation der Tabelle, aber nicht der einzelnen Spalten geändert. Jetzt geht es :)

Danke noch einmal für die Hilfe und entschuldigung, dass ich den Thread ins falsche Forum gestellt hatte.

Bis die Tage,
Malte :)
 

Neue Beiträge

Zurück