• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Umlaute und Groß/Kleinschreibung

b1zarRe

Mitglied
Hey!

Ausgangslage:
Ich arbeite an einem Loginsystem. Es werden vom Benutzer Loginname sowie Passwort eingegeben und
mittels PHP verarbeitet und mithilfe von MySQL werden die Passwörter abgeglichen (dazwischen noch eine Verschlüsselung).

Ich möchte, dass der Benutzername EXAKT dem entsprechen soll, welcher auch in der Datenbank steht:
Hans != hans != hAnS usw. => Hans = Hans wäre die einzig gültige Möglichkeit. Dazu habe
ich in den Abfragen "BINARY" in der UTF8 kodierten und Latin1_german2_ci kollatierten Datenbank benutzt:

Bisherige Abfrage:
SELECT *
FROM benutzer
WHERE loginname LIKE BINARY 'Hans';

Klappt soweit gut.

Problem:
Sobald Umlaute in dem Benutzernamen vorkommen, klappt diese Frage nicht und gibt nichts mehr aus.
Wenn ich das "BINARY" weglasse, klappt die die Überprüfung auch mit Loginnamen welche Umlaute beinhalten, ABER dann wird wieder nicht auf die Groß- u. Kleinschreibung geachtet.

Was mache ich falsch?
 
Hallo,

na du sagst ja extra mit LIKE das groß klein egal ist.
Mach doch ein richtigen vergleiche WHERE loginname = 'Hans'; oder was stört daran?

Cheffchen
 
Wenn ich aber "=" benutze, also zb.:

SELECT *
FROM benutzer
WHERE loginname = 'Müller';

wird die Groß/Kleinschreibung nicht beachtet. Also wenn ich anstelle von "Müller" "müller" eingebe, wird mir der Datensatz dennoch angezeigt (genau das will ich nicht...: Nur "Müller" soll zutreffen nicht "müller" oder "müLeR"

Ich weiß nicht warum, aber ein "BINARY" hinter WHERE brachte leider keine Datensätze hervor...


EDIT:
Anscheinend klappt es nun. Habe nun in der Datenbank auch die einzelnen Felder von latin_german zu utf8_bin geändert. => Sollte man immer utf8 benutzen?

EDIT 2
Leider habe ich dennoch ein Problem:
In der Datenbank selbst klappen nun alle Testabfragen, wenn ich aber mein Loginsystem im Browser aufrufe klappen alle abfragen ausser die, die Umlaute beinhalten. Mein PHP Dokument hat aber
im Head stehen:
<meta charset="UTF-8">

Auch wenn ich per "echo" den Namen ausgebe, wird dieser korrekt (mit Umlaut) auf der Webseite
angezeigt, jedoch klappt der Login in dennoch nicht. (Andere Fehlerquellen sind mMn ausgeschlossen).

In anderen Worten:
SELECT *
FROM benutzer
WHERE loginname = 'ü';

klappt in der Datenbank über die MySQL UI Seite (es wird der korrekte Datensatz angezeigt) aber NICHT in meinem Skript bzw. wenn der Anwender die Seite im Browser aufrufen würde.
Die einzige Vermutung die ich habe, dass mein PHP Skript Umlaute nicht korrekt an die Datenbank schickt... aber Sie werden dennoch korrekt ausgeben (test mittels "echo")... Wo kann der Fehler noch liegen?!
 
Zuletzt bearbeitet:
Du musst auch die Datenbankverbindung mit dem Zeichensatz utf8 aufbauen. Stichwort set charset sollte bei der suche helfen ;)

Außerdem wäre es vorteilhaft, wenn Du alle betroffenen Dateien in utf8 ohne BOM speichern würdest. Zudem wäre eine Prüfung des HTTP-Headers hilfreich. Dort sollte ebenfalls der Zeichensatz utf8 für das ausgelieferte HTML-Dokument genannt werden,
 
Wie oben schon beschrieben, habe ich bereits in der Datenbank, im HTML Dokument sowie im PHP Dokument auf UTF8 gestellt... Auch habe ich alles ohne BOM gespeichert.
 
Zurück
Oben