Hallo dedlfix,
schön mal wieder deine tollen und qualifizierten Erläuterungen zu lesen.
vielen Dank dafür.
Das ist nur ein Default-Wert für neu zu erstellende Felder. Ebenso ist der Wert für eine Datenbank nur ein Default-Wert für die darin neu zu erstellende Tabellen. Letzlich zählt die Kodierung jedes einzelnen Feldes.
Verstehe ich dich richtig, dass ich also jede einzelne Tabelle und hier wiederum jede einzelne Spalte von Hand ändern muss.
Etwa mit;
ALTER TABLE tabellen\_name
CHANGE Spalte1
Spalte2
CHARACTER SET utf8 COLLATE utf8_general_ci ; ?
Den solltest du unabhängig von der gewählten Vorgehensweise machen. Beim Dumpen und beim Einlesen musst du auf die Angabe der korrekten Kodierung achten. Der phpMyAdmin dumpt immer in UTF-8, wenn du nichts angibst oder nichts angeben kannst (wenn iconv oder recode nicht installiert ist).
Nochmals zum Dump.
Angenommen ich exportiere die gesamte DB mit PhpMyAdmin. Wenn ich dann die SQL Datei mit "iconv" (das gibt es glaube ich auch für Windows) in UTF8 umwandle und alle Zeilen wo "DEFAULT CHARSET=latin1" ersetze durch UTF-8.
Und dann mit PhpMyAdmin (eingestellt auf UTF-8) wieder zurückspiele, müsste es doch eigentlich auch funktionieren oder?
Nein. Zum einen ist der HTTP-Header gleichen Namens stärker, zum anderen musst du bei der Kommunikation mit dem DBMS angeben, welchen Kodierung du auf dieser deiner aktuellen Verbindung zu verwenden gedenkst. Notfalls geht das für die ISO-8859- und Latin-Familie sowie UTF-8 mit einem "SET NAMES"-Statement, besser wäre die mysql_set_charachter_set() aus der MySQL-API zu verwenden oder deren Pendant in der jeweiligen Umgebung (z.B. PHP: mysql_set_charset() und mysqli_set_charset()).
Ja das mit dem SET Names habe ich auch gelesen. Hatte ich bisher nicht gemacht. Ich arbeite mit PDO. Dann müsste ich das entsprechende PDO Statement gleich nach der Connection für UTF-8 angeben?
Wenn ich dann zusätzlich noch folgende Änderungen vornehme:
Im Apache die httpd.conf auf;
ddDefaultCharset utf-8
In der PHP.ini
[PHP]
default_charset = “utf-8″
[mbstring]
mbstring.language = utf-8
mbstring.internal_encoding = utf-8
mbstring.http_input = utf-8
mbstring.http_output = utf-8
und in der MySQL my.cnf Datei;
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
character-set-server = utf8
collation-server= utf8_general_ci
init_connect = ‘SET collation_connection = utf8_general_ci’
init_connect = ‘SET NAMES utf8′
[mysqldump]
default-character-set = utf8
[mysqlimport]
default-character-set = utf8
[mysql]
default-character-set = utf8
angebe, dann müsste ich doch eigentlich auf der sicheren Seite sein.
Was meinst du?
vielen Dank und viele Grüße
hawk