PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche utf-8


odessa
29.10.2005, 22:22:40
Halle an Alle,

ich habe ein Problem mit LIKE. Ich möchte, dass die Gross- und Kleinschreigung nicht unterschieden wird.

mit

word LIKE "$w"

finde ich:

1. wenn ich "spielen" suche, finde ich:
spielen und Spielen

2. wenn ich "Spielen" suche, finde ich:
spielen und Spielen


3. wenn ich "öffnen" suche, finde ich nur:
öffnen

4. wenn ich "Öffnen" suche, finde ich nur:
Öffnen

Fall 3 und 4 sind falsch. Ich möchte immer beide Variante finden. Ich vermute, dass das Problem mit uft-8 zu tun hat. Die Datenbank ist in diesem Chart-Set gespeichert. Das kömische ist, dass dass nur mit Umlauten passiert.

Könnte jemand mir bitte helfen? Wie kann man das lösen?

Vielen Dank
Odessa

feuervogel
30.10.2005, 00:48:50
benutze LOWER()

SELECT `bla` FROM `blubb` WHERE LOWER( `suchfeld` ) LIKE LOWER( '$variable' )

p.s.: welche mysql-version hast du?

xabbuh
30.10.2005, 13:24:05
Mit welcher Collation läuft die Datenbank? Die Einstellung kannst du mit SHOW VARIABLES LIKE '%collation%' herausfinden. Vorraussetzung dafür ist natürlich, dass du eine entsprechende MySQL-Version verwendest.

diver-network
31.10.2005, 09:16:33
Hi,

soweit ich mich erinnere benötigst Du bei MySQL für einen exakten Vergleich (hallo != HALLO) das BINARY- Statement.

Versuch mal Deinen SELECT so:

SELECT * FROM tabelle WHERE spalte = BINARY("hugo");

Dies sollte Dir alle Ergebnisse mit dem String in exakt der eingegebenen Schreibweise geben.

Anbei auch noch ein Auszug aus einem Thread auf mailing.database.mysql vom 21.10.2005 (Titel: Multiple LIKE comparison using IN operator):

All string comparisons in MySQL are case-insensitive, unless by use of
the BINARY keyword they are made to be case-sensitive.

Try executing the following expressions:


SELECT 'abc' LIKE 'abc';
SELECT 'abc' LIKE 'ABC';
SELECT 'abc' LIKE BINARY 'abc';
SELECT 'abc' LIKE BINARY 'ABC';
SELECT 'abc' = 'abc';
SELECT 'abc' = 'ABC';
SELECT 'abc' = BINARY 'abc';
SELECT 'abc' = BINARY 'ABC';
SELECT 'abc' IN ('abc');
SELECT 'abc' IN ('ABC');
SELECT 'abc' IN (BINARY 'abc');
SELECT 'abc' IN (BINARY 'ABC');


See
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
for a reference.


Antwortender war Bill Karwin, der in dieser Usegroup momentan einer der kompetentesten Antworter ist.

HTH,

Andy

EDIT: Sorry, hab' gerade gesehen, daß Dir die Schreibweise egal ist. Ich hatte es beim ersten Durchlesen genau anders interpretiert. Sprich: Meine Lösung ist für Dich nicht relevant.

xabbuh
31.10.2005, 12:23:53
Hi,
soweit ich mich erinnere benötigst Du bei MySQL für einen exakten Vergleich (hallo != HALLO) das BINARY- Statement.
Nicht zwingend. Falls MySQL >= 4.1 mit einer case-sensitiven Collation verwendet wird, wird Groß- und Kleinschreibung bei Vergleichen beachtet.

diver-network
31.10.2005, 12:53:43
Hi xabbuh,

vielen Dank für die Info. Werde ich bei meiner nächsten Datenbank beachten.

Gruß,

Andy