2012-04-05 6 views
1

Ich habe stundenlang für eine Frage gesucht, und ich habe keine Antwort gefunden, die für mich geeignet war, so ... Hier komme ich ...Betonungszeichen und MySQL Benutzer

Ich bin Ungar und wir verwenden die folgenden Zeichen mit Akzent in unserer Sprache: áéíóöőúüű (und natürlich die Gegenstücke in der Hauptstadt) Ich möchte eine intelligente Suche in PHP machen, wo der Benutzer ein Suchwort eingeben darf und das Ergebnis findet, ob es den Akzent oder hat nicht und sowohl in der MySQl-Tabelle als auch im Suchfeld. Also ...

Meine MySQL-Tabelle verwendet utf8_hungarian_ci Ich kann die PHP-Konvertierung tun, so dass entweder der Benutzer in 'Bla' oder 'blá' gibt es 'bla' zurück und wir suchen die MySQL-Datenbank.

Aber mein Problem ist ... Meine Datenbank könnte einen 'bla fér' oder 'bláter' Feldeintrag haben. Aber wenn wir mit 'bla' (von PHP) suchen, gibt es nur 'bla fer' zurück. Wie kann ich das Feld, das ich suche, in 'bla fér' umwandeln -> 'bla fer' und 'bláter' -> 'blater'. Also im Wesentlichen ...

Ich möchte die akzentuierten Zeichen loswerden und sie zu unbetonten machen. Aber natürlich nur um zu suchen. Bitte helfen Sie! Vielen Dank!

EDIT:

<?php 
$search = $_GET["search"]; // May contain áéíóöőúüű 
$accented= array("Ö","ö","Ü","ü","ű","Ó","ó","O","o","Ú","ú","Á","á","U","u","É","é","Í","í"," ","+","'","ő", "Ű", "Ő", "ä","Ä","ű","Ű","ő","Ő"); 
$nonaccented=array("O","o","U","u","u","O","o","O","o","U","u","A","a","U","u","E","e","I","i","_","_","_","o", "U", "O", "a","A","u","u","o","o"); 
$search = str_replace($accented,$nonaccented,$search); 
$query = "SELECT id, name FROM people WHERE name LIKE '%$search%'"; // Database column 'name' may also contain áéíóöőúüű 
?> 
+0

können Sie die entsprechenden SQL und PHP-Code schreiben? – barsju

+0

Mögliches Duplikat von: http://stackoverflow.com/questions/3304464/mysql-diacritic-insensitive-search-spanish-accents – barsju

+0

Ich versuchte http://stackoverflow.com/questions/3304464/mysql-diacritic-insensitive-search -Spanisch-Akzente, aber es funktioniert nicht für mich. Ich setze die Zeichen auf utf8 – user1177476

Antwort

0

Hier sind einige Ergebnisse aus meinen Tests. Sie können Ihre vergleichen:

CREATE TABLE `test` (
    `id` int(11) NOT NULL auto_increment, 
    `name` varchar(32) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 

Tabelleninhalt:

mysql> select * from test; 
+----+---------+ 
| id | name | 
+----+---------+ 
| 1 | bla  | 
| 2 | blater | 
| 3 | bláter | 
| 4 | bhei | 
+----+---------+ 
4 rows in set (0.00 sec) 

Suchergebnisse;

mysql> select * from test where name like '%bla%'; 
+----+---------+ 
| id | name | 
+----+---------+ 
| 1 | bla  | 
| 2 | blater | 
| 3 | bláter | 
+----+---------+ 
3 rows in set (0.00 sec) 

Suche mit Akzent:

mysql> select * from test where name like '%blá%';; 
+----+---------+ 
| id | name | 
+----+---------+ 
| 3 | bláter | 
+----+---------+ 
1 row in set (0.00 sec) 

ich die gleichen Ergebnisse auch mit COLLATE=utf8_hungarian_ci

+0

ich nicht. Und ich weiß nicht warum ... Kann es wegen der alten MySQL-Version sein? – user1177476

+0

Ich lief 5.0.77. Hast du meinen Test reproduziert oder nur deine eigenen Tische benutzt? – barsju

+0

Ja und es funktioniert immer noch nicht. Bummer ... Danke trotzdem! – user1177476

Verwandte Themen