Hi!
Ich habe für alle Datenbankeinträge UTF_8_bin als Kollation gewählt um mir erstmal alle Möglichkeiten(Groß und Kleinschreibung, ü/u) offen zu lassen.
Da der Fehler gern im Detail steckt bitte ich dich, bei den Begrifflichkeiten möglichst genau zu sein. "Datenbankeinträge" sind im Allgemeinen Daten. Wenn du Datenbank, Tabelle, Felder meinst, dann benenn sie bitte auch so, damit man weiß, wovon du sprichst. Die Feldeinstellung ist letztlich wichtig, wobei der zweite Teil (genannt Kollation. hier: bin) nicht für die Ablage sondern für das spätere Verarbeiten interessiert.
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
Beide Statements ändern die selben Konfigurationswerte. Sie überschreiben sich also gegenseitig, wenn du beide absendest. Üblicherweise will man aber die Auswirkungen von SET CHARACTER SET nicht haben.
> `mysql_set_charset('utf8',$sqldb);`{:.language-php}
Und da du diese Funktion verwenden kannst, brauchst du gar keins von den beiden obigen Statements abzusenden. Solange du diese Funktion verwenden kannst, solltest du ihr den Vorzug vor dem SET NAMES-Statement geben. Außerdem musst du sie nach jedem mysql\_connect() ausführen, da sie nur für die aktuelle Verbindung arbeitet.
> You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�ste VARCHAR(12) NOT NULL )'
Das sieht danach aus, als ob du doch kein UTF-8 sendest sondern Latin1/ISO-8859-1/Windows-1252.
> Der Code der ausgeführt wird soll eigentlich heißen:
>
> ~~~php
> $grpadmin[0] = 'Administratoren';
> $grpmod[0] = 'Moderatoren';
> $grpreg[0] = 'Registrierte';
> $grpguest[0] = 'Gäste';
>
> $grptablecreate = '
> CREATE TABLE groups (
> id INT AUTO_INCREMENT PRIMARY KEY,
> name VARCHAR(80) NOT NULL,
> '.$grpadmin[0].' VARCHAR(12) NOT NULL,
> '.$grpmod[0].' VARCHAR(12) NOT NULL,
> '.$grpreg[0].' VARCHAR(12) NOT NULL,
> '.$grpguest[0].' VARCHAR(12) NOT NULL
> );
Schau dir lieber den fertigen String an und schick ihn mal durch urlencode(). Bekommst du für das ä zwei %xx-Sequenzen oder nur eine?
Will ich aber zum Beispiel einen Eintrag mit einem Umlaut in die Tabelle schreiben so klappt das gut:
Der Eintrag heißt dann: "Gäste"
(Ich hoffe mal das ist Richtig :))
Das kommt ganz darauf an, wo und wie du das betrachtest. Wenn das so im phpMyAdmin angezeigt wird, dann hast du was falsch gemacht. Du hast dabei UTF-8 gesendet, das DBMS hat aber Latin1 gelesen und nach UTF-8 umkodiert. Oder aber im DBMS ist alles richtig und du schaust dir die UTF-8-Ausgabe als ISO-8859-1 interpretiert an.
Was ich möchte ist einfach, dass ich mit Umlauten in UTF_8 in der MySQL-Tabelle Arbeiten kann.
Wäre super wenn mir das jemand nochmal erklären könnte wie das funktioniert.
Wenn man es richtig macht, funktioniert das problemlos. Du musst nur dafür sorgen, dass
a) jedes System intern mit der gewählten Kodierung umgehen kann und
b) beim Datenaustausch dem Zielsystem die verwendete Kodierung mitgeteilt wird und die Daten auch tatsächlich in dieser Kodierung vorliegen.
Die Kodierung von Daten lässt sich am besten im Hex-Modus betrachten. bin2hex() ist eine unter PHP verwendbare Funktion und urlencode() lässt sich auch gut dafür missbrauchen.
Lo!