Umlaute, MySQL 4.x in Suche (LIKE)

Umlaute, MySQL 4.x in Suche (LIKE)

am 21.12.2006 16:39:11 von Karsten Wutzke

Hallo alle!

Ich möchte in n Spalten unscharf nach einem Begriff suchen. Folgendes
SQL wird von meinem PHP generiert:

select KNR, Suchbegriffe, Firmenname, PLZ, Ort, Land, Anrede1, Titel1,
Vorname1, Nachname1
from customer
where KNR LIKE '%müll%'
OR Suchbegriffe LIKE '%müll%'
OR Firmenname LIKE '%müll%'
OR PLZ LIKE '%müll%'
OR Ort LIKE '%müll%'
OR Land LIKE '%müll%'
OR Anrede1 LIKE '%müll%'
OR Titel1 LIKE '%müll%'
OR Vorname1 LIKE '%müll%'
OR Nachname1 LIKE '%müll%'

Prinzipiell ists so richtig. Ich möchte eben alle Müller's und andere
finden. Im Moment passiert aber *gar nichts*, d.h. die search('müll')
- Methode liefert *keine* Ergebnisse in PHP. Wenn ich das SQL-Statement
in phpMyAdmin, dem MySQL Query Browser wie auch im (Cygwin)
Shell-Client dann werden genau 87 Einträge angezeigt...

Hat jemand eine Ahnung was los ist und wie ichs behebe?

Karsten

PS: LIKE für die Suche ist im Moment OK, da der DB server schnell ist
und dieser nur intern genutzt wird...

Re: Umlaute, MySQL 4.x in Suche (LIKE)

am 21.12.2006 16:56:24 von Heiko Richler

Hallo Karsten,

> where KNR LIKE '%müll%'

> Prinzipiell ists so richtig. Ich möchte eben alle Müller's und andere
> finden. Im Moment passiert aber *gar nichts*, d.h. die search('müll')
> - Methode liefert *keine* Ergebnisse in PHP. Wenn ich das SQL-Statement
> in phpMyAdmin, dem MySQL Query Browser wie auch im (Cygwin)
> Shell-Client dann werden genau 87 Einträge angezeigt...
>
> Hat jemand eine Ahnung was los ist und wie ichs behebe?

Es gibt verschiedene Codetabellen für die Zeichensätze. Die meisten
neueren Linux-Distributionen benutzen UTF8 Windows für Deutschland meist
Latin1.

Ich nehme an Dein Server benutzt UTF8.

In HTML kann ein Encoding angegeben werden. Außerdem kann bei Formularen
und am Webserver (für HTTP) ein gewünschtes Encoding angegeben werden.
Wenn Du das nicht angibst wird Dein Browser raten bzw. sein
Standardencoding benutzen. Das was Du dann bekommst und verarbeitest ist
dann nicht so kodiert wie Du es erwartest und das ü ist nicht das was Du
als ü erwartest.

Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage

Re: Umlaute, MySQL 4.x in Suche (LIKE)

am 21.12.2006 17:29:07 von Karsten Wutzke

Heiko Richler schrieb:

> Hallo Karsten,
>
> > where KNR LIKE '%müll%'
>
> > Prinzipiell ists so richtig. Ich möchte eben alle Müller's und ande=
re
> > finden. Im Moment passiert aber *gar nichts*, d.h. die search('müll')
> > - Methode liefert *keine* Ergebnisse in PHP. Wenn ich das SQL-Statement
> > in phpMyAdmin, dem MySQL Query Browser wie auch im (Cygwin)
> > Shell-Client dann werden genau 87 Einträge angezeigt...
> >
> > Hat jemand eine Ahnung was los ist und wie ichs behebe?
>
> Es gibt verschiedene Codetabellen für die Zeichensätze. Die meisten
> neueren Linux-Distributionen benutzen UTF8 Windows für Deutschland meist
> Latin1.
>
> Ich nehme an Dein Server benutzt UTF8.
>

Jap, utf8_general_ci in den Spalten.

> In HTML kann ein Encoding angegeben werden. Außerdem kann bei Formularen
> und am Webserver (für HTTP) ein gewünschtes Encoding angegeben werden.
> Wenn Du das nicht angibst wird Dein Browser raten bzw. sein
> Standardencoding benutzen. Das was Du dann bekommst und verarbeitest ist
> dann nicht so kodiert wie Du es erwartest und das ü ist nicht das was Du
> als ü erwartest.
>
> Heiko

Ah OK. Hmm, wo auch immer ich nun suche.

Habe außerdem festegestellt, dass

$str =3D 'müll';

//replace umlauts
$umlauts =3D array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß');
$replaces =3D array('ae','oe','ue','Ae','Oe','Ue', 'ss');

$str =3D str_replace($umlauts, $replaces, $str);

*denselben* String liefert wie das Eingabeargument...

Warum auch immer... jemand eine Idee?

Karsten

Re: Umlaute, MySQL 4.x in Suche (LIKE)

am 21.12.2006 17:30:24 von Karsten Wutzke

Achja hier läuft PHP 4.3.x also können mit str_replace arrays
verwendet werden.

Karsten

Re: Umlaute, MySQL 4.x in Suche (LIKE)

am 21.12.2006 18:05:23 von Heiko Richler

Hallo Karsten,

> Habe außerdem festegestellt, dass
>
> $str = 'müll';
>
> //replace umlauts
> $umlauts = array('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß');
> $replaces = array('ae','oe','ue','Ae','Oe','Ue', 'ss');
>
> $str = str_replace($umlauts, $replaces, $str);
>
> *denselben* String liefert wie das Eingabeargument...

Also $str == 'müll' nach der str_replace Funktion?

Hast Du genau diese Zeilen im Skript stehen, oder stammt der
ursprüngliche Wert in $str aus einer anderen Quelle?

> Warum auch immer... jemand eine Idee?

Damit ich mitkomme:
Funktioniert die Abfrage wenn Du die SQL-Anweisung fest in PHP eingibst?
Wenn Du einen Wert mit Umlaut aus der Datenbank holst, passen die Umlaute?

Bin mir jetzt nicht mal mehr sicher ob ich Dir da etwas richtiges
geschrieben habe: Aber ich meinte mich zu erinnern, dass das auch im
HTTP funktionieren sollte. Aber egal, ich denke daran liegt es nicht.

Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage