PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dump importiert, zeichensatz problem



saiki
22.02.2007, 00:46
ich habe aus einer suse installation (10.0) meine datenbank gesichert.

dies habe ich mit


mysqldump -uroot -pmeinpasswort datenbank > /tmp/dump.sql


getan. so weit so gut. danach gentoo installiert.

in die neue mysql wollte ich wieder meine datenbank importieren



mysql -uroot -pmeinpasswort datenbank < /tmp/dump.sql


import hat auch funktioniert, nur wird mir auf meinen webseiten jetzt sowas angezeigt. Aus Tür wird beispielsweise:



Tür


soweit zum problem. jetzt zu den dump-infos:



-- MySQL dump 10.9
--
-- Host: localhost Database: datenbank
-- ------------------------------------------------------
-- Server version 4.1.13

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;



ich habe versucht per phpmyadmin und bash den dump zu importieren. gelang auch immer, aber die umlaute passen einfach nicht. wie kriege ich also meine umlaute wieder und nicht diesen zeichensalat?

dmaphy
22.02.2007, 08:21
Weisst du noch, welchen Zeichensatz die alte Datenbank auf dem Suse-System hatte? - Das ist relativ wichtig, weil die neue scheint UTF-8 zu haben.
Wenn ja, kannst du mit iconv den dump.sql konvertieren.
siehe hier: http://weblogger.ch/blog/archives/2006/09/07/passage-a-utf-8/

edit: alternativ fällt mir da grad diese Zeile in deinen dump-infos auf:


/*!40101 SET NAMES utf8 */;

du könntest mal probieren, die zu entfernen.

saiki
22.02.2007, 08:51
ich hab die alte mysql der suse hier noch in nem chroot laufen, ich könnte also nachschauen, allerdings wie krieg ich auf der konsole den zeichensatz mit "mysql" heraus?

dmaphy
22.02.2007, 09:32
Direkt einen Befehl um den momentan verwendeten Zeichensatz anzuzeigen kenne ich nicht, allerdings hab ich da ne Idee:



show charset;


Zeigt dir alle möglichen Zeichensätze an, die möglich sind. Wenn ich mir die Liste bei mir so anschaue, ist es wohl ziemlich wahrscheinlich, dass es latin1 ist. Ob das wirklich so ist, kannst du ja prüfen, indem du mit



charset latin1;


den Zeichensatz einfach mal festlegst und dann eine select-abfrage machst.
Werden die Umlaute richtig angezeigt kannst du davon ausgehen dass latin1 dein Kandidat ist. Bei iconv musst du nur darauf achten ob du iso-8859-1 für "normales" latin1 oder evtl. iso-8859-15 für latin1 + Euro-Zeichen verwendest.

Wolfgang
22.02.2007, 10:36
Hallo
Macht es doch nicht so kompliziert.
Mysql kann das selbst übernehmen.
Schaust du HIER (http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html)

Gruß Wolfgang

saiki
22.02.2007, 23:51
also wolfgangs tipp hat mich nur einen kleinen schritt weiter gebracht. da ich von mysql ungefähr so viel ahnung wie von herztransplantationen habe.

ok, soweit, sogut. ich habe in beiden datenbanken folgenden befehl ausgeführt:



SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

dabei kam folgendes raus.

quelldatenbank:


+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+



zieldatenbank:


+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+




und da ich wie gesagt nicht wirklich der mysql held bin, wäre eine etwas genauere vorgehensweise nett ;) also wie kriege ich meine alten daten in die neue db, ohne komische darstellungsprobleme? danke für eure geduldige hilfe!

PS: fragt mich nicht wieso das in der quelldb auf schwedisch gestellt war/ist. fragt suse...

dmaphy
23.02.2007, 18:16
Also ich tendiere immernoch zu der Lösung mit dem iconv. (siehe weiter oben.)
Was mir noch eingefallen ist: du könntest dir mit mysqldump nochmal einen neuen dump ziehen, allerdings mit dem Parameter --set-charset.

Das mit dem schwedisch ist übrigens standardmässig so von MySQL her wenn ich mich irre.

saiki
24.02.2007, 00:53
also, ich habs jetzt hinbekommen. ich habe einfach aus der alten db das zeugs mit latin1 exportiert. dann habe ich einfach das dump genommen und bei "SET NAMES" UTF8 geschrieben. dann einfach in die neue mysql importiert. dann gings. danke für eure geduld :)