Hallo Liste, ich bin am verzweifeln mit MySQL und den Zeichensätzen! System ist SuSE9.3 mit aktuellen patches, MySQL-Server ist 4.1.10a phpMyAdmin ist 2.7.0-pl2 Ich habe eine kleine Datenbank mit Adressen, die auch Umlate und ß (ß) enthält. Wo ich konnte, habe ich "utf8" eingestellt und mit awk ein SQL-Skript geschnitzt, mit dem die ursprünglichen Daten (.csv) eingelesen wurden. Die Umlaute sind auch original erhalten geblieben und werden von den PHP-Skripten im Browser richtig angezeigt. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> funktioniert. Jetzt will ich die Datenbank auf ein SUSE10.1, MySQL5.0.18 System migrieren und habe zu diesem Zweck "mysqldump --default-character-set=utf8 datenbank" angestrengt ... Aber die Umlaute sind alle zersägt, d.h. alle werden in Latin1 dargestellt, Doppelzeichen. Über die Gurgle bin ich auf http://blog.koehntopp.de/archives/1360-Zeichensatzaerger.html gestoßen. Sehr informativ, hat mich aber nicht schlau genug gemacht, mysqldump zu utf8-Umlauten zu überreden. mysql> SHOW VARIABLES LIKE "character_set_%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 7 rows in set (0,00 sec) Also habe ich alle Systemvariablen vom mysqld nachgesehen und in /etc/my.cnf character_set_client=utf8 character_set_connection=utf8 character_set_database=utf8 character_set_results=utf8 character_set_server=utf8 nachgezogen. Die Optionen character_set_results/_client/_connection kennt mysqld 4.1.10a offenbar nicht, er weigert sich damit zu starten, obwohl er das so ausgibt. Also mit character_set_server/_database=utf8 startet er und sagt: mysql> SHOW VARIABLES LIKE "character_set_%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 7 rows in set (0,00 sec) Im phpMyAdmin kann ich keine Systemvariable mit "latin1" mehr entdecken ... Im mysql-Client kann ich keine Unlaute eingeben, obwohl xterm und KDE konsole auf LANG=de_DE.UTF-8 stehen. D.h. mysql> select hex("ö"); konnte ich nicht ausprobieren. Aber "mysqldump --default-character-set=utf8 datenbank" erfüllt mir die ersehnten Umlaute nicht. Was muß ich tun? In welcher Richtung muß ich weitersuchen? Danke im Vorraus Grüße Christoph --
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- <<
Hallo, Am Donnerstag 24 August 2006 14:56 schrieb Christoph Hanslik:
Hallo Liste, ich bin am verzweifeln mit MySQL und den Zeichensätzen! ...
mysql> SHOW VARIABLES LIKE "character_set_%"; +--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+ 7 rows in set (0,00 sec)
Also habe ich alle Systemvariablen vom mysqld nachgesehen und in /etc/my.cnf
character_set_client=utf8 character_set_connection=utf8 character_set_database=utf8 character_set_results=utf8 character_set_server=utf8
nachgezogen. Die Optionen character_set_results/_client/_connection kennt mysqld 4.1.10a offenbar nicht, er weigert sich damit zu starten, obwohl er das so ausgibt. Also mit character_set_server/_database=utf8 startet er und sagt:
mysql> SHOW VARIABLES LIKE "character_set_%"; +--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+ 7 rows in set (0,00 sec)
Im phpMyAdmin kann ich keine Systemvariable mit "latin1" mehr entdecken ... Im mysql-Client kann ich keine Unlaute eingeben, obwohl xterm und KDE konsole auf LANG=de_DE.UTF-8 stehen. D.h. mysql> select hex("ö"); konnte ich nicht ausprobieren.
Aber "mysqldump --default-character-set=utf8 datenbank" erfüllt mir die ersehnten Umlaute nicht.
Was muß ich tun? In welcher Richtung muß ich weitersuchen?
Ich bin kein MySQL Spezi, aber: Die Daten IN der Datenbank wurden doch bisher mit latin1 verwaltet. Dementsprechend solltest Du character_set_database auf latin1 lassen. Einfaches ändern des Parameters ändert ja nicht die Kodierung aller Zeichen in der DB. Du möchtest die Daten aus der DB mit utf8 'rausbekommen' und auf dem Client mit utf8 speichern (oder was auch immer). Dementsprechend würde ich character_set_client, character_set_connection und character_set_results auf utf8 stellen.
Danke im Vorraus
Grüße
Christoph
--
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- <<
Viel Glück -- MfG Rolf Masfelder EMail: rolf.masfelder@nector.de
Vielen Dank Rolf, Am Donnerstag, 24. August 2006 15:23 schrieb Rolf Masfelder:
Hallo,
Am Donnerstag 24 August 2006 14:56 schrieb Christoph Hanslik:
Hallo Liste, ich bin am verzweifeln mit MySQL und den Zeichensätzen!
...
mysql> SHOW VARIABLES LIKE "character_set_%"; +--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+ 7 rows in set (0,00 sec)
Also habe ich alle Systemvariablen vom mysqld nachgesehen und in /etc/my.cnf
character_set_client=utf8 character_set_connection=utf8 character_set_database=utf8 character_set_results=utf8 character_set_server=utf8
nachgezogen. Die Optionen character_set_results/_client/_connection kennt mysqld 4.1.10a offenbar nicht, er weigert sich damit zu starten, obwohl er das so ausgibt. Also mit character_set_server/_database=utf8 startet er und sagt:
mysql> SHOW VARIABLES LIKE "character_set_%"; +--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+ 7 rows in set (0,00 sec)
Im phpMyAdmin kann ich keine Systemvariable mit "latin1" mehr entdecken ... Im mysql-Client kann ich keine Unlaute eingeben, obwohl xterm und KDE konsole auf LANG=de_DE.UTF-8 stehen. D.h. mysql> select hex("ö"); konnte ich nicht ausprobieren.
Aber "mysqldump --default-character-set=utf8 datenbank" erfüllt mir die ersehnten Umlaute nicht.
Was muß ich tun? In welcher Richtung muß ich weitersuchen?
Ich bin kein MySQL Spezi, aber: Die Daten IN der Datenbank wurden doch bisher mit latin1 verwaltet. Dementsprechend solltest Du character_set_database auf latin1 lassen. Einfaches ändern des Parameters ändert ja nicht die Kodierung aller Zeichen in der DB. Du möchtest die Daten aus der DB mit utf8 'rausbekommen' und auf dem Client mit utf8 speichern (oder was auch immer). Dementsprechend würde ich character_set_client, character_set_connection und character_set_results auf utf8 stellen.
leider startet mysqld mit den von Dir erwähnten Variablen nicht, das hatte ich probiert. Die große Unklarheit bei mir ist eigentlich, wo und wann werden in der Datenbank die Charactersets umcodiert und warum? Warum kann der mysql-Client die Utf8-Umlaute anzeigen, aber warum kann ich an der selben Stelle keine eingeben? Ich glaube, ich werde übers Wochenende mal probieren alle Daten auf "latin1" umzustellen und dann das ganze noch mal von vorn ... So ist wohl auch der Artikel http://blog.koehntopp.de/archives/1360-Zeichensatzaerger.html gemeint (vermute ich mal). (man hat ja sonst nichts zu tun...)
Viel Glück -- MfG Rolf Masfelder EMail: rolf.masfelder@nector.de
Danke und Grüße Christoph --
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- <<
participants (2)
-
Christoph Hanslik
-
Rolf Masfelder