MySQL-Abfrage: Vokal mit Zirkumflex wie normalen Vokal behandeln

bekay

Mitglied
Hallo,

ich weiß natürlich: ein ô ist kein o! Aber angenommen, man hat in einer Datenbank-Spalte "Tôkyô" stehen, weil es die korrekte Transkription des japanischen Ausdrucks in lateinischen Buchstaben ist. Nun kann man dieses Wissen nicht von einem Nutzer verlangen, der in einer Webanwendung einen Suchbegriff eingibt, worauf dann eine MySQL-Abfrage gestartet wird. Gibt es eine Möglichkeit in MySQL, dass eine Anfrage mit dem String "Tokyo" die Spalte mit dem String "Tôkyô" findet?
 
Hi,

das ist eine Frage der Collation.

LG

Dann wird das jetzt leider auch zu einem PHP-Thread... ich habe meine PHP-Anwendung schon vor einiger Zeit versucht, komplett auf utf8 umzustellen. Dementsprechend sieht der Anfang meines Skriptes wie folgt aus:

Code:
$db = mysql_connect("Host","Name","Passwort");
setlocale (LC_ALL, 'de_DE@euro');

mysql_select_db("datenbank", $db);

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET 'utf8'");

Tja, was muss ich jetzt ändern? Folgender Versuch führte leider nicht zu Ergebnissen:

Code:
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");
mysql_query("SET CHARACTER_SET 'utf8'");

Oder sollte ich den Zusatz "COLLATE 'utf8_general_ci'" direkt in die eigentliche Datenbankabfrage einbauen?
 
Zuletzt bearbeitet:
Hi,

eine Möglichkeit ist auf jeden Fall, die Collation direkt in der Abfrage anzugeben.

Code:
SELECT * FROM tabelle 
   WHERE spalte COLLATE utf8_general_ci = 'tokyo'

Du könntest aber auch mal nachschauen, in welcher Kodierung die Tabelle eigentlich vorliegt und mit welcher Collation denn diese Spalte versehen ist.

LG
 
Hallo!

Mein Problem war ein anderes: Ich habe von einer Regexp-Abfrage eine UTF8-Kollation erwartet. Nun habe ich rausbekommen, dass dies nicht geht. :suspekt:

Also habe ich meine Datenbank gleich auf Fulltext gestellt. Funktioniert soweit auch super (tokyo=tôkyô) - nur jetzt geht es weiter... :(

Sowohl die Stoppwortliste als auch die Beschränkung auf Suchwörter ab vier Buchstaben ist für meine Zwecke völlig sinnlos: meine Spalten sind gefüllt mit Filmtiteln! Da muss jedes noch so scheinbar unwichtige Wort indiziert und gesucht werden - besonders die Stoppwörter! Gibt es überhaupt eine Möglichkeit, diese Einstellungen bei einem Webspaceanbieter zu ändern?

Es kann ja eigentlich nicht sein, dass für meine Zwecke (uneingeschränkte Filmtitelvolltextsuche mit UTF8-Kollation) nur die "like"-Abfrage zur Verfügung steht, wenn ich keinen eigenen Sever habe...?
 
Ja, mach ich auf jeden Fall.

Eine andere Möglichkeit wäre ja noch, die Suchbegriffe auf das Vorkommen von Stoppwörtern (die Liste hat man irgendwo gespeichert, z.B. in einem Array) zu überprüfen, diese zu extrahieren und die Fulltext-Abfrage mit einer REGEXP-Abfrage dieser extrahierten Wörter zu kombinieren
 

Neue Beiträge

Zurück