Nina: phpmyadmin Problem beim SQL-Import auf Server, COLLATE!?!

Hallo Ihr Fachmänner!

Habe ein riesen grosses Problem. Habe mir meine Seite offline mit PHP, MySQL mit Hilfe des Xampp erstellt und alles läuft bestens. Jetzt habe ich gerade meine FTP-Daten übertragen und wollte jetzt die MySQL-Tabellen übertragen ... habe das früher immer über einen lokalen SQL-Export geamcht und dann das Ganze wieder als SQL-Abfrage auf dem Server im WWW importiert.
Wie gesagt, lokal benutze ich XP mit einem XAMPP und phpMyAdmin 2.6.3-pl1, MySQL 4.1.13. Im WWW habe ich einen Account mit PHP und MySQLdatenbank mit phpMyAdmin 2.6.3-pl1 und MySQL 4.0.21-Max ... so jeweils die Angaben von phpMyAdmin.
Wenn jetzt also die MySQL-Daten übertragenn will, dann bekomme auf dem WWW-Server immer einen Fehler, der etwas mit COLLATE zu tun hat - diese COLLATE-Angaben werden auch nur von meinem lokalen Server beim Export hinzugefügt, der phpMyAdmin im WWW macht das nicht ???
Wenn ich dann die COLLATE-Zusätze einfach aus der Abfrage lösche, dann werden die Sonderzeichen nicht im WWW angezeigt, sondern irgendwelche Hirolgyphen ???

Meine Bitte: Kann mir irgendjemand sagen, was ich machen muss, dass meine lokalen phpmyadmin-XAMPP-MySQL-Daten korrekt auf den Server im WWW übertragen werden? Inkl. Sonderzeichen ...

Muss ich da irgendetwas umstellen ...

Vielen Dank.

Es grüsst Euch herzlich und mit sonnigem Lächeln,

Nina

  1. Nochmal ich,

    die Fehlermeldung ist immer in der Art

    "You have an error in your SQL syntax near 'collate latin1_general_ci default NULL"

    ... evtl. kann da jemand mit anfangen!

    LG, Nina

    1. Moin!

      "You have an error in your SQL syntax near 'collate latin1_general_ci default NULL"

      ... evtl. kann da jemand mit anfangen!

      Die COLLATE Angabe ist erst ab MySQL 4.1 verfügbar und steht im Zusammenhang mit der Unicode-Fähigkeit dieser Version. Damit wird die Sortierreihenfolge geregelt.

      Einfaches Beispiel: Der Name "Müller" kann alphabetisch als "Muller" oder "Mueller" bei den Namen beginnend mit "Mu" erscheinen, oder auch als "Müller" in der Sortierung noch hinter "Mz".

      Dein Problem ist, dass du zuhause eine Datenbank benutzt, die mehr kann, als deine Datenbank auf dem Live-Server. Und vermutlich wegen der Unicode-Fähigkeit von 4.1 werden deine Texte in irgendeinem Zeichensatz exportiert, den die Version 4.0 nicht erkennt bzw. nicht direkt verarbeiten kann, ohne dass du da noch etwas Sonderbehandlung in deinem Skript dazwischenschaltest.

      - Sven Rautenberg

      --
      My sssignature, my preciousssss!
  2. Wenn jetzt also die MySQL-Daten übertragenn will, dann bekomme auf dem WWW-Server immer einen Fehler, der etwas mit COLLATE zu tun hat - diese COLLATE-Angaben werden auch nur von meinem lokalen Server beim Export hinzugefügt, der phpMyAdmin im WWW macht das nicht ???
    Wenn ich dann die COLLATE-Zusätze einfach aus der Abfrage lösche, dann werden die Sonderzeichen nicht im WWW angezeigt, sondern irgendwelche Hirolgyphen ???

    Wenn mich nicht alles täuscht hast du das doch vor kurzem erst gefragt und auch eine Antwort erhalten, oder?

    Egal, ich hatte zufällig am gleichen Tag das gleiche Problem.

    Erstmal musst du beim Export Die Option wählen: "SQL-Export-Kompatibilität:"

    Dann musst du die Daten noch von utf-8 in den normalen ASCI (bzw. ISO iso-8859-1) Zeichensatz, wie die schon gesagt wurde mit einem geeigneten Editor (wobei ich das nicht hingekriegt habe) oder mit einem Skript.

    Ein Perl Skript, das das tut sieht z.b. so aus:

    #!/usr/bin/perl -w
    use Unicode::UTF8simple;
    my $uref = new Unicode::UTF8simple;
    my $file = "input_file.sql";

    open N, ">$file.asc";
    open F, "<$file";
    while(<F>)
    {
      print N $uref->fromUTF8("iso-8859-1",$_);
    }
    close N;
    close F;

    Struppi.

    1. Hi,

      erstmal danke. Kannst Du mir evtl. noch sagen, wie ich Dein Perlscript in PHP umschreiben kann? und das ganze danach noch mit gzip packen kann?

      Vielen lieben Dank,

      Die Nina, die dasnoch nicht gefragt hatte  :-)

    2. echo $begrüßung;

      Dann musst du die Daten noch von utf-8 in den normalen ASCI (bzw. ISO iso-8859-1) Zeichensatz, wie die schon gesagt wurde mit einem geeigneten Editor (wobei ich das nicht hingekriegt habe) oder mit einem Skript.

      Unter Linux kann man iconv oder recode verwenden. Vielleicht gibt es das auch unter cygwin.

      Unter Windows geht es mit beispielsweise mit dem UltraEdit (hier beschrieben für Version 10):

      • Öffnen der Datei
      • In der Statuszeile steht zwischen Cursorposition und Änderungsdatum das Zeilenendeformat (DOS/UNIX) und die Kodierung (U8 = UTF8)
      • Auch wenn dort kein U8 steht, Datei -> Konvertieren -> UTF8 nach ASCII

      Manchmal hat der UltraEdit keine Lust. Dann hat bei mir immer geholfen, ein neues Dokument zu erzeugen, alles dorthinüber zu kopieren, dort zu konvertieren und wieder zurückkopieren

      echo "$verabschiedung $name";