[MySQL 4.1] Umlaute nach Export aus DB

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.1] Umlaute nach Export aus DB

    Tach alle zusammen,

    Ich habe hier eine *.sql Datei mit einer aus MySQL exportierten LänderTabelle. Leider sind sämtliche sonderzeichen oder Umlaute falsch exportiert wurden.

    Statt Thüringen habe ich zB. Thüringen,
    statt Oberöstereich habe ich Oberösterreich... usw usw...

    Ich hab jetzt die Länder, wo ich die echten Zeichen wie öäü kannte einfach mit suchen ersetzen tauschen lassen. Allerdings sind hier anscheinend länder dabei, die noch weitere Zeichen oder Umlaute haben, die ich nicht kenne. Wie bekomme ich denn raus, welche Zeichen wie zB. ÂŽ oder ™ usw. wiederum welche Buchstaben ergeben? Oder wie müsste ich die Tabelle wieder importieren, damit die Zeichen in den Ländernamen wieder stimmen?

    Mario

  • #2
    musst dir die db klasse noch schreiben

    PHP-Code:
    class sql_replacer{
        var 
    $db NULL;
        function 
    __construct ($dbarray){
            
    $this->db     = new db($dbarray);
        }
        function 
    sql_replacer($dbarray){
            
    $this->__construct($dbarray);
        }
        function 
    replace(){
            
    $tables $this->db->return_tables();
            foreach(
    $tables as $table){
                
    $fields     NULL;
                
    $table_key     NULL;
                
                
    $fields     $this->db->return_fields($table);
                            
                
    /*
                    Sucht den Primärschlüssel der Tabelle
                */
                
    foreach($fields as $field){
                    if(
    $field['Key'] == "PRI"){
                        
    $table_key $field['Field'];
                        break;
                    }
                }
                
                
    $query "SELECT * FROM $table";
                
                
    $erg $this->db->sql($query);
                while(
    $row mysql_fetch_assoc($erg)){
                    
    $beg " ";
                    
    $query_part NULL;
                    foreach(
    $row as $key => $value){
                        if(
    $key == $table_key)
                            continue;
                            
                        
    $suche = array ('@ä@i',  
                                        
    '@ö@i',           
                                        
    '@ü@i',                    
                                        
    '@ß@i',
                                        
    '@Ö@i',
                                        
    '@Ä@i',
                                        
    '@Ãœ@i');                 
                        
                        
    $ersetze = array ('ä',
                                          
    'ö',
                                          
    'ü',
                                          
    'ß',
                                          
    'Ö',
                                          
    'Ä',
                                          
    'Ü');
                        
                        
    $text preg_replace($suche$ersetze$row[$key]);
                        
                        
    $query_part .= $beg.$key." = '".$text."' ";
                        
    $beg ", ";
                    }
                    
    $query "UPDATE $table SET $query_part WHERE $table_key=".$row[$table_key]."";
                    
                    echo 
    $query."<br>\n";
                }
                
                echo 
    "Tabelle: $table , Key: $table_key<br>\n";
                exit;
            }
        }
    }

    $replacer = new sql_replacer($datenbank);
    $replacer->replace(); 

    Kommentar


    • #3
      hier die db klasse

      PHP-Code:
      <?php
      $hostname_DB1 
      "localhost";
      $username_DB1 "user";
      $password_DB1 "pw";
      $database_DB1_1 "db";
      $database_connect_DB1 mysql_connect($hostname_DB1$username_DB1$password_DB1) or die(mysql_error());

      $datenbank = array("connect_DB1" => $database_connect_DB1"host" => $hostname_DB1"user" => $username_DB1"pwd" => $password_DB1"DB1_1" => $database_DB1_1);
      /*
      *    Datenbankklasse von Joshua Beckers
      *
      *    Stand 30.11. 2006
      *
      *    @author Joshua Beckers
      */
      class db{
          var 
      $connid;
          var 
      $erg;
          var 
      $dbname;
      /**
        * Konstruktor für die Datenbankklasse
        *
        * @param  mixed     $host_or_dbarray
        *                 Entweder String Host oder
        *                    Array mit host, user und pwd freiwillig DB1_1
        * @param  string     $user [username]
        * @param  string     $passwort [password]
        * @return resource Connectionid
        * @access public
        */
          
      function db($host_or_dbarray,$user NULL,$passwort NULL){
              if(
      is_array($host_or_dbarray)){
                  if(!
      $this->connid mysql_connect($host_or_dbarray['host'], $host_or_dbarray['user'], $host_or_dbarray['pwd'])){
                      echo 
      "Fehler beim Verbinden...";
                  }
                  if(!empty(
      $host_or_dbarray['DB1_1'])){
                      
      $this->select_db($host_or_dbarray['DB1_1']);
                      
      $this->dbname $host_or_dbarray['DB1_1'];
                  }
              }else{
                  if(!
      $this->connid mysql_connect($host_or_dbarray$user$passwort)){
                      echo 
      "Fehler beim Verbinden...";
                  }
              }
              return 
      $this->connid;
          }

          function 
      select_db($db){
              if (!
      mysql_select_db($db$this->connid)){
                  echo 
      "Fehler beim Auswählen der DB...";
              }
          }

          function 
      sql($sql){
              if (!
      $this->erg mysql_query($sql$this->connid)){
                  echo 
      "Fehler beim Senden der Abfrage... <br />".mysql_error()."";
              }
              return 
      $this->erg;
          }

          function 
      return_sql_array($erg){
              
      $return false;

              while(
      $row mysql_fetch_assoc($erg)){
                  
      $return[] = $row;
              }

              return 
      $return;
          }

          function 
      return_sql_row($erg){
              
      $row mysql_fetch_assoc($erg);
              return 
      $row;
          }

          function 
      return_sql_param($row$field){
              return 
      $row[$field];
          }
          function 
      return_tables($dbname NULL){
              if(empty(
      $dbname))
                  
      $dbname $this->dbname;
              if(empty(
      $dbname))
                  return 
      false;
                  
              
      $erg $this->sql("SHOW TABLES FROM ".$dbname."");
              if (
      mysql_num_rows($erg) > 0) {
                  while (
      $row mysql_fetch_assoc($erg)) {
                      
      $tables[] = $row["Tables_in_".$dbname];
                  }
              }
              return 
      $tables;
          }
          function 
      return_fields($table){
              if(empty(
      $table))
                  return 
      false;
                  
              
      $erg $this->sql("SHOW COLUMNS FROM ".$table."");
              if (
      mysql_num_rows($erg) > 0) {
                  while (
      $row mysql_fetch_assoc($erg)) {
                      
      $cols[] = $row;
                  }
              }
              return 
      $cols;
          }
      }
      ?>

      Kommentar


      • #4
        Das "falsch exportiert" nennt sich UTF8 ... hol dir n Editor der das abkann und dein "Problem" ist gelöst~

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          [MySQL 4.1] Umlaute

          @ toshen

          Vielen Dank für die Klassen.
          Werde sie mir mal näher anschauen.

          @ghostgambler

          Ich exportiere aus MySQL ( phpMyAdmin ) direkt in eine *.sql Datei.
          Und wenn ich diese Datei in einem beliebigen Editor ( DW, Editor, Wordpad etc.... etc... ) anschaue, dann sind die Umlaute falsch.
          Das sagt mir, dass es nicht am Editor liegen kann oder liege ich total falsch? Welchen Editor würdest du denn vorschlagen, sofern es wirklich an diesem liegt?

          Mairo

          Kommentar


          • #6
            Re: [MySQL 4.1] Umlaute

            Original geschrieben von GELight
            Und wenn ich diese Datei in einem beliebigen Editor ( DW, Editor, Wordpad etc.... etc... ) anschaue, dann sind die Umlaute falsch.
            Das sagt mir, dass es nicht am Editor liegen kann oder liege ich total falsch?
            Ja - dann erkennt dein Editor halt auch kein UTF-8.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              [MySQL 4.1] Editoren

              Was für Editoren könnt ihr mir da empfehlen?
              Ich hab jetzt verschiedene versucht aber keiner konnte diese Zeichen von sich aus korrekt darstellen.

              Gruß, Mario

              Kommentar


              • #8
                Editor

                gut++ und kostenlos++ Notepad++
                4cms.de

                Kommentar


                • #9
                  [MySQL 4.1] Editor

                  Danke für den Link.
                  Hab mir den Editor mal gezogen und muss aagen der gefällt mir ganz gut. Wenn dieser jetzt noch FTP unterstützen würde, dann wärs perfekt...

                  Um nicht noch einen neuen Post erstellen zu müssen, habe ich auch gleich noch eine weitere Frage... auch bezüglich der Zeichen/Umlaute usw...

                  Ich arbeite nebenbei ja immermal an meinem eigenen System und würde gerade was eine mehrsprachigkeit angeht gern auf EINEM Standard bleiben. Hierzu wäre ja das UTF-8 angebracht oder?
                  Also habe ich eben einfach mal von grund auf mit meinem HTML Header angefangen und dort von:

                  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

                  auf

                  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

                  gestellt. Nun sind wie erwartet alles mögliche an Umlauten usw. falsch dargestellt. Da ich ja alles auf mehrsprachig halten will und ich alle Texte etc., in eine DB(Übersetzungstabelle) schreibe, stellt sich mir hier die Frage, wie muss ich mit meiner Datenbank oder der darin liegenden Tabellen umgehen um auch hier auf ein und dem selben Standard zu arbeiten? Bisher hab ich immer gesehen, dass egal auf welchem Server ich war, alle Datenbanken und auch die einzelnen Tabellen auf latin2_general_ci gestellt waren.
                  Muss ich hier nicht auch besser gleich alles auf utf8_unicode_ci stellen oder sollte man hier besser die vom Hoster vorgegebenen Einstellungen immer so übernehmen, wie sie sind? So lege ich zB. eine Tabelle an:

                  PHP-Code:
                  CREATE TABLE meineTabelle 
                  `
                  idint(11NOT NULL auto_increment
                  `
                  gruppenIDint(11NOT NULL
                  PRIMARY KEY  (`id`) ) TYPE MYISAM 
                  Was würde passieren, wenn ich mein System auf einem Server in einem anderen Land mit anderer Sprache als dem europäischen Zeichensatz installieren und laufen lassen will. Was muss ich beachten bei der Darstellung von Texten... sollte man die Texte, die in der DB gespeichert werden sollen IMMER mit html_entities und utf8_decode vorher umgewandelt werden? Usw usw...

                  Ich hab einiges an Fragen, was das angeht...
                  Am Ende suche ich halt einen sauberen Weg, dass ich mein System "möglichst" Weltweit einsetzen kann und mir einfach keine Sorgen mehr machen brauche, dass meine Zeichen falsch dargestellt werden.

                  Wenn es da evtl. ein paar gute Seiten gibt, wo man da mal gut heran geführt wird oder sich mal informieren kann, dann wäre das super. Ich bin hier auf der http://dev.mysql.com/doc/refman/5.1/...code-sets.html
                  Seite aber da weiß man auch nicht immer gleich nach was mach suchen muss und wie man am besten was wie speichern muss.



                  Mario

                  Kommentar


                  • #10
                    Schau mal das sql Befehl SET NAMES unter http://dev.mysql.com/doc/refman/5.1/...onnection.html
                    an. Damit kannst du dem Mysql Server sagen, das Du und Er jetzt zb. in UTF-8 die Daten Sendest und Empfangen willst.
                    Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

                    Kommentar

                    Lädt...
                    X