MYSQL-Suche mit Umlauten

MYSQL-Suche mit Umlauten

am 19.05.2006 11:59:38 von steffen horst

Hallo,

ich würde gerne eine Suche über zwei Spalten realisieren und bin dabei auf
das Problem der Umlaute gestoßen. In meinen Tabellen gibt es Einträge mit
Umlauten und mit ß/ss. Diese Daten können nicht mehr verändert werden. Nun
möchte ich bei einer Suche auf diesen Tabellen den Nutzer nicht
einschränken, und z.b. ß und ss gleich behandeln (u.a. schon deshalb, weil
einige Daten in der Datenbank in alter Rechtschreibung vorliegen).

Die Frage ist nun:

Gibt es eine bessere Möglichkeit, als bei der Suchanfrage Suchfeld und
Anfrage auf ein gemeinsames Format umzuschreiben, also à la

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Spal te, 'Ä', 'A'),
'Ö', 'O'), 'Ü', 'U'), 'ä', 'a'), 'ö', 'o'), 'ü','u'), 'ß', 's')");

Wie belastend wäre sowas für den Datenbankserver?

Eine Alternative, die mir spontan einfallen würde, wäre das Anlegen von
Extra-Spalten in diesem einheitlichen Format auf denen die Suche dann
durchgeführt werden würde. Das kommt mir allerdings nicht besonders kreativ
vor, zumal ich diese Extra-Spalte bei jedem Update berücksichtigen müsste.

Wie macht Ihr das?

Schöne Grüße, Steffen

Re: MYSQL-Suche mit Umlauten

am 19.05.2006 12:52:43 von Hartmut Holzgraefe

steffen horst wrote:
> Hallo,
>=20
> ich würde gerne eine Suche über zwei Spalten realisieren und =
bin dabei auf
> das Problem der Umlaute gestoßen. In meinen Tabellen gibt es Eintr=
äge mit
> Umlauten und mit ß/ss. Diese Daten können nicht mehr verä=
ndert werden. Nun
> möchte ich bei einer Suche auf diesen Tabellen den Nutzer nicht
> einschränken, und z.b. ß und ss gleich behandeln (u.a. schon =
deshalb, weil
> einige Daten in der Datenbank in alter Rechtschreibung vorliegen).

Welches Datenbankprodukt, welche Version?

Wenn MySQL: schon mal die latin1_german1_ci / latin2_german2_ci
Charsets probiert?

Und wo ist der PHP-Bezug?

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/

Re: MYSQL-Suche mit Umlauten

am 19.05.2006 13:22:02 von steffen horst

Hallo,

>> ich würde gerne eine Suche über zwei Spalten realisieren und bin dabei
>> auf das Problem der Umlaute gestoßen. In meinen Tabellen gibt es
>> Einträge mit Umlauten und mit ß/ss. Diese Daten können nicht mehr
>> verändert werden. Nun möchte ich bei einer Suche auf diesen Tabellen
>> den Nutzer nicht einschränken, und z.b. ß und ss gleich behandeln (u.a.
>> schon deshalb, weil einige Daten in der Datenbank in alter
>> Rechtschreibung vorliegen).
> Welches Datenbankprodukt, welche Version?

Wie im Betreff: MySQL (Version 5.0).

> Wenn MySQL: schon mal die latin1_german1_ci / latin2_german2_ci
> Charsets probiert?

Ich hab die Spalten auf latin1/latin1_german1_ci
bzw. latin1/latin1_german2_ci umgestellt, also:

ALTER TABLE `object` CHANGE `name` `name` VARCHAR(255)
CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL.

Trotzdem werden Felder mit ß bei einer Anfrage mit 'ss' nicht gefunden.

> Und wo ist der PHP-Bezug?

Vielleicht sind ja auch Lösungen auf PHP-Ebene denkbar. Naja wahrscheinlich
hast Du recht, d.c.d.mysql wäre vielleicht passender.

Schöne Grüße, Steffen

Re: MYSQL-Suche mit Umlauten

am 19.05.2006 13:38:00 von Hartmut Holzgraefe

steffen horst wrote:
> Ich hab die Spalten auf latin1/latin1_german1_ci
> bzw. latin1/latin1_german2_ci umgestellt, also:
>=20
> ALTER TABLE `object` CHANGE `name` `name` VARCHAR(255)
> CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL.
>=20
> Trotzdem werden Felder mit ß bei einer Anfrage mit 'ss' nicht gefu=
nden.

tut bei mir wunderbar mit latin1_german2_ci:

mysql> select * from t1 where v =3D 'tesst';
+---+-------+
| i | v |
+---+-------+
| 2 | tesst |
| 3 | teßt |
+---+-------+
2 rows in set (0.00 sec)

mysql> select * from t1 where v =3D 'teßt';
+---+-------+
| i | v |
+---+-------+
| 2 | tesst |
| 3 | teßt |
+---+-------+
2 rows in set (0.00 sec)

kann es sein das Du ein UTF8-Terminal benutzt aber
Dein Client-Charset auf Latin1 steht? Oder umgekehrt?


--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/

Re: MYSQL-Suche mit Umlauten

am 19.05.2006 13:39:31 von Hartmut Holzgraefe

Hartmut Holzgraefe wrote:
> steffen horst wrote:
>> Ich hab die Spalten auf latin1/latin1_german1_ci
>> bzw. latin1/latin1_german2_ci umgestellt, also:
>>
>> ALTER TABLE `object` CHANGE `name` `name` VARCHAR(255)
>> CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL.
>>
>> Trotzdem werden Felder mit ß bei einer Anfrage mit 'ss' nicht gef=
unden.
>=20
> tut bei mir wunderbar mit latin1_german2_ci:

ich hätte vielleicht noch erwähnen sollen:

german1: Telefonbuch-Sortierung, ä=3Da, ß=3Ds
german2: Wörterbuch/Lexikon-Sortierung, ä=3Dae, ß=3Dss

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/

Re: MYSQL-Suche mit Umlauten

am 19.05.2006 15:30:50 von steffen horst

Hallo,

> kann es sein das Du ein UTF8-Terminal benutzt aber
> Dein Client-Charset auf Latin1 steht? Oder umgekehrt?

Eigentlich ist hier alles auf UTF-8 gestellt. Ich benutze die DB-Klasse von
PEAR, bei der ich keinen Charset einstellen kann.

Muss ich die Datenbank nun komplett auf Latin1 umstellen und alle Daten, die ich
aus der Datenbank hole nach UTF-8 konvertieren?

Oder gibts vielleicht auch latin1_german2_ci entsprechendes für UTF-8?


Schöne Grüße, Steffen

PS: Vielen Dank jedenfalls für den Tipp, das ist genau das, was
ich brauche. Und was hoffentlich auch noch klappen wird...