Datenbanken unterschiedliche Zeichensätze
-
- Mitglied
- Beiträge: 72
- Registriert: 07.01.2006 08:20
- Kontaktdaten:
Datenbanken unterschiedliche Zeichensätze
Hallo,
ich bin gerade dabei ein Forum auf einen anderen Webserver umzuziehen. Probleme macht dabei die Zeichencodierung in mysql.
In der Quelldatenbank steht z.B. H?fe (wenn ich ein select mache) in der Zieldatenbank korrekt Höfe.
Soweit, so gut.
Leider ists im Forum genau andersherum.
Da steht im Quellforum richtig Höfe, im Zielforum irgendwelcher Sonderzeichenmüll.
Wie bekomme ich das wieder geradegezogen?
Danke!
P.S. Da auf dem Zielsystem auch andere Datenbanken im mysql laufen wäre eine Anpassung der globalen mysql Einstellungen so ziemlich das Schlechteste.
ich bin gerade dabei ein Forum auf einen anderen Webserver umzuziehen. Probleme macht dabei die Zeichencodierung in mysql.
In der Quelldatenbank steht z.B. H?fe (wenn ich ein select mache) in der Zieldatenbank korrekt Höfe.
Soweit, so gut.
Leider ists im Forum genau andersherum.
Da steht im Quellforum richtig Höfe, im Zielforum irgendwelcher Sonderzeichenmüll.
Wie bekomme ich das wieder geradegezogen?
Danke!
P.S. Da auf dem Zielsystem auch andere Datenbanken im mysql laufen wäre eine Anpassung der globalen mysql Einstellungen so ziemlich das Schlechteste.
- Mahony
- Ehemaliges Teammitglied
- Beiträge: 12179
- Registriert: 17.11.2005 22:33
- Wohnort: Ostfildern Kemnat
- Kontaktdaten:
Re: Datenbanken unterschiedliche Zeichensätze
Hallo
Lies mal hier Die Umlautproblematik. Da wird dir alles wichtige zum Thema erklärt.
Grüße: Mahony
Lies mal hier Die Umlautproblematik. Da wird dir alles wichtige zum Thema erklärt.
Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
-
- Mitglied
- Beiträge: 72
- Registriert: 07.01.2006 08:20
- Kontaktdaten:
Re: Datenbanken unterschiedliche Zeichensätze
Theoretisch ist mir das schon klar.
Die Frage ist nur wie ich praktisch mein Problem gelöst bekomme. Extra deswegen mysqldumper zu installieren sehe ich nicht als Möglichkeit.
Was ich nicht verstehe:
Das sqldump erzeugt Statements wie:
CREATE TABLE `phpbb3_acl_groups` (
`group_id` mediumint(8) unsigned NOT NULL default '0',
`forum_id` mediumint(8) unsigned NOT NULL default '0',
`auth_option_id` mediumint(8) unsigned NOT NULL default '0',
`auth_role_id` mediumint(8) unsigned NOT NULL default '0',
`auth_setting` tinyint(2) NOT NULL default '0',
KEY `group_id` (`group_id`),
KEY `auth_opt_id` (`auth_option_id`),
KEY `auth_role_id` (`auth_role_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-> Ok, Quelltabelle ist utf8.
Show table status auf der Ziel-DB (ist V5 deswegen geht das da, Quelle ist V4):
| phpbb3_acl_groups | MyISAM | 10 | Fixed | 301 | 14 | 4214 | 3940649673949183 | 13312 | 0 | NULL | 2010-01-29 05:31:29 | 2010-01-29 05:31:29 | 2010-01-29 05:31:30 | latin1_swedish_ci | NULL | | |
-> Wo hier ein latin1_swedish_ci herkommt verstehe ich überhaupt nicht. Lt. create Statement sollte da utf8_bin drinstehen...
Lt. status verwendet die Ziel-DB als characterset latin1.
... wenn ich eine Tabelle doch aber explizit mit utf8 anlege, verstehe ich einfach nicht wieso die Tabelle dann doch wieder latin1 ist...
Was ich nicht weiss: Wie ich heraus bekomme was eigentlich der Zeichensatz der Quell-DB ist.
Ich habe versucht mit iconv die Zeichensätze zu konvertieren. Aber mit Parameter -f utf8 meldet iconv "illegale input sequence" -> Scheint also nicht utf8 codiert zu sein...
Die Frage ist nur wie ich praktisch mein Problem gelöst bekomme. Extra deswegen mysqldumper zu installieren sehe ich nicht als Möglichkeit.
Was ich nicht verstehe:
Das sqldump erzeugt Statements wie:
CREATE TABLE `phpbb3_acl_groups` (
`group_id` mediumint(8) unsigned NOT NULL default '0',
`forum_id` mediumint(8) unsigned NOT NULL default '0',
`auth_option_id` mediumint(8) unsigned NOT NULL default '0',
`auth_role_id` mediumint(8) unsigned NOT NULL default '0',
`auth_setting` tinyint(2) NOT NULL default '0',
KEY `group_id` (`group_id`),
KEY `auth_opt_id` (`auth_option_id`),
KEY `auth_role_id` (`auth_role_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-> Ok, Quelltabelle ist utf8.
Show table status auf der Ziel-DB (ist V5 deswegen geht das da, Quelle ist V4):
| phpbb3_acl_groups | MyISAM | 10 | Fixed | 301 | 14 | 4214 | 3940649673949183 | 13312 | 0 | NULL | 2010-01-29 05:31:29 | 2010-01-29 05:31:29 | 2010-01-29 05:31:30 | latin1_swedish_ci | NULL | | |
-> Wo hier ein latin1_swedish_ci herkommt verstehe ich überhaupt nicht. Lt. create Statement sollte da utf8_bin drinstehen...
Lt. status verwendet die Ziel-DB als characterset latin1.
... wenn ich eine Tabelle doch aber explizit mit utf8 anlege, verstehe ich einfach nicht wieso die Tabelle dann doch wieder latin1 ist...
Was ich nicht weiss: Wie ich heraus bekomme was eigentlich der Zeichensatz der Quell-DB ist.
Ich habe versucht mit iconv die Zeichensätze zu konvertieren. Aber mit Parameter -f utf8 meldet iconv "illegale input sequence" -> Scheint also nicht utf8 codiert zu sein...
-
- Mitglied
- Beiträge: 72
- Registriert: 07.01.2006 08:20
- Kontaktdaten:
Re: Datenbanken unterschiedliche Zeichensätze
... über die Beantwortung meiner Fragen bzw. Aufklärung meines Nichtwissens wäre ich zwar immer noch dankbar, aber die Lösung ist eigentlich ganz einfach:
Bei dump erzeugen einfach angeben in welchen Zeichensatz er das erzeugen soll (In meinem Fall also latin1, da das Ziel mysql ja darauf eingestellt ist):
mysqldump --default_character_set=latin1
Bei dump erzeugen einfach angeben in welchen Zeichensatz er das erzeugen soll (In meinem Fall also latin1, da das Ziel mysql ja darauf eingestellt ist):
mysqldump --default_character_set=latin1
Re: Datenbanken unterschiedliche Zeichensätze
Nein, das ist nicht die korrekte Lösung des Problems. Dabei gehen nämlich Zeichen, die zwar in UTF8 sind aber nicht in latin1 sind, verloren. Unter Umständen hat dein Board aber garkeine derartigen Zeichen oder es ist dir nicht aufgefallen. In phpBB sind Beiträge prinzipiell UTF8, die Tabellen müssen also UTF8 sein.
In der Regel ist das Problem durch Ausführen des MySQL-Upgraders zu beheben. Siehe z.B. KB:no_default.
In der Regel ist das Problem durch Ausführen des MySQL-Upgraders zu beheben. Siehe z.B. KB:no_default.
Powered by Coffee
-
- Mitglied
- Beiträge: 72
- Registriert: 07.01.2006 08:20
- Kontaktdaten:
Re: Datenbanken unterschiedliche Zeichensätze
... die Tabellen sind ja auch UTF8, schliesslich werden sie ja per dump aus der alten Quelldatenbank exportiert. Ich hab ja auch kein Problem mit dem DB Schema (die beschriebenen Meldungen in dem Link bekomme ich auch gar nicht) sondern nur mit der Zeichendarstellung.
Ich verstehe einfach nicht wo das Problem herkommt, da würde mir vielleicht eine Lösung einfallen.
Ich verstehe einfach nicht wo das Problem herkommt, da würde mir vielleicht eine Lösung einfallen.
- Mahony
- Ehemaliges Teammitglied
- Beiträge: 12179
- Registriert: 17.11.2005 22:33
- Wohnort: Ostfildern Kemnat
- Kontaktdaten:
Re: Datenbanken unterschiedliche Zeichensätze
Hallo
Grob gesagt: Du musst die Tabellen in dem Zeichensatz einspielen, den die Datenbank erwartet..
Wichtig sind die Parameter character_set_client und character_set_connection.
Der SQL-Befehl zur Anzeige der benötigten Variablen lautet übrigens: SHOW VARIABLES
Um die Anzeige übersichtlicher zu halten würde aber auch ein genügen.
Hättest du das Backup mit dem Mysqldumper angefertigt und auch wieder mit dem Mysqldumper eingespielt, dann hättest du damit überhaupt keine Probleme gehabt. Der Mysqldumper macht das nämlich bereits automatisch richtig.
Grüße: Mahony
Hattest du dir den verlinkten Artikel auch genau durchgelesen? Da steht doch ganz genau beschrieben, wie so etwas zustande kommt.Ich verstehe einfach nicht wo das Problem herkommt, da würde mir vielleicht eine Lösung einfallen.
Grob gesagt: Du musst die Tabellen in dem Zeichensatz einspielen, den die Datenbank erwartet..
Wichtig sind die Parameter character_set_client und character_set_connection.
Der SQL-Befehl zur Anzeige der benötigten Variablen lautet übrigens: SHOW VARIABLES
Um die Anzeige übersichtlicher zu halten würde aber auch ein
Code: Alles auswählen
SHOW VARIABLES LIKE 'character_set%';
Wie gesagt - mit dem oben genannte SQL-Befehl kannst du dir den verwendeten Zeichensatz anzeigen lassen.Was ich nicht weiss: Wie ich heraus bekomme was eigentlich der Zeichensatz der Quell-DB ist.
Hättest du das Backup mit dem Mysqldumper angefertigt und auch wieder mit dem Mysqldumper eingespielt, dann hättest du damit überhaupt keine Probleme gehabt. Der Mysqldumper macht das nämlich bereits automatisch richtig.
Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
-
- Mitglied
- Beiträge: 72
- Registriert: 07.01.2006 08:20
- Kontaktdaten:
Re: Datenbanken unterschiedliche Zeichensätze
Ja, ich hab mir den Artikel durchgelesen.
Das Problem was ich nicht verstehe:
Die Tabellen sind in beiden Fällen utf8. Damit hätte ich eigentlich auch erwartet das ein export/import das selbe Ergebnis liefert. Jedenfalls kenne ich das bisher von anderen DBMS so.
Die Zeichensätze im mysql sehen auch gleich aus:
Quelle:
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)
Ziel:
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
... also für mich sieht das alles gleich aus, nur das Ergebnis ist nicht das was ich erwartet hätte.
Das Problem was ich nicht verstehe:
Die Tabellen sind in beiden Fällen utf8. Damit hätte ich eigentlich auch erwartet das ein export/import das selbe Ergebnis liefert. Jedenfalls kenne ich das bisher von anderen DBMS so.
Die Zeichensätze im mysql sehen auch gleich aus:
Quelle:
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)
Ziel:
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
... also für mich sieht das alles gleich aus, nur das Ergebnis ist nicht das was ich erwartet hätte.