Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Probleme mit utf8 bei Insert und Update

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Probleme mit utf8 bei Insert und Update

    Hallo,

    ich habe folgenes Problem. Ich habe zwei von der Struktur identische Datenbanken, beide utf8-unicode. Nun will ich de Änderungen des letzten Tages von der einen in die andere Datenbank übertragen.
    In der 2. Datenbank kommen aber nur ???? an.
    Hier der Code-Auszug für eine der Tabellen:
    Zu Debugzwecken habe ich mir den SQL-String ausgeben lassen, da ist alles noch in Ordnung.

    INSERT IGNORE INTO tbl_translation (id,item_language,item_key,item_value) VALUE ("938","08","abwicklungsinformation","Информаци я по оформлению ");
    PHP-Code:
    <?php

        mysql_db_query
    ($dbNameLokal,"SET NAMES 'utf8'");
        
    mysql_db_query($dbNameLokal,"SET CHARACTER SET 'utf8'");
        
    // Daten aud der 1. Datenbank holen und in ein Array packen
        
    $sqlstr "SELECT * FROM tbl_translation WHERE DATE(aktualisiert_am) = '".date('Y-m-d')."';";
        
    $result mysql_db_query($dbNameLokal,$sqlstr);
        if (
    $result)
        {
           
    $translationArray = array();
           while (
    $line mysql_fetch_array($result))
           {       
              
    array_push($translationArray,$line);
           }
        }
        unset(
    $result);
        

        
    mysql_db_query($dbNameInternet,"SET NAMES 'utf8'");
        
    mysql_db_query($dbNameInternet,"SET CHARACTER SET 'utf8'");
        
    // Daten aus dem Array auslesen und in die 2. Datenbank schreiben
        
    foreach ($translationArray as $translation)
        {
           
    // Prüfen ob Eintrag schon vorhanden ist, wenn ja update sonst insert
           
    $sqlstr2 'SELECT * FROM tbl_translation WHERE id="'.$translation[0].'";';
           
    $result2 mysql_db_query($dbNameInternet,$sqlstr2);
           if (
    mysql_num_rows($result2)>0)
           {         
              unset(
    $result2);
              
    $sqlstr2 'UPDATE tbl_translation SET item_language="'.$translation[3].'", item_key="'.$translation[4].'", item_value="'.$translation[5].'" WHERE id ="'.$translation[0].'";';        
              echo 
    "<br>".$sqlstr2;
              
    $result2 mysql_db_query($dbNameInternet,$sqlstr2);
              
    $anzTranslationUpdate++;
           }
          else
          {         
             
    $sqlstr2 ='INSERT IGNORE INTO tbl_translation (id,item_language,item_key,item_value) VALUE ("'.$translation[0].'","'.$translation[3].'","'.$translation[4].'","'.$translation[5].'");';    
            echo 
    "<br>".$sqlstr2;
            
    $result2 mysql_db_query($dbNameInternet,$sqlstr2);
            
    $anzTranslationInsert++;
          }
           unset(
    $result2);
          if (
    mysql_error())        
             echo 
    mysql_error()." ".$sqlstr2." <br>";
    }
    unset(
    $result2);
    ?>

  • #2
    Willkommen im Forum. Bitte lese zuerst die Forenregeln damit dir auch vernünftig geholfen werden kann.

    Kommentar


    • #3
      Habe ich doch, hatte nur ein paar Formatieriungsprobleme, die ich hoffentlich nun behoben habe.

      Kommentar


      • #4
        Schön

        Welche Kollationen haben die beiden Tabellen denn?

        Kommentar


        • #5
          Alles utf8_unicode_ci
          Die 2. DB ist eine identische Kopie der 1. DB

          Kommentar


          • #6
            Hmm also wenn du den INSERT String ausgibst wird der richtig angezeigt? Dann versuch mal mysql_query() statt mysql_db_query(), die ist nämlich veraltet, siehe Manual.

            Kommentar


            • #7
              Hat leider nichts geholfen.
              habe sowohl

              mysql_query("SET NAMES 'utf8'");
              mysql_query("SET CHARACTER SET 'utf8'");

              als auch bei der Insert Anweisung auf mysql_query geändert

              mysql_db_querry habe ich verwendet, da ich ja mit zwei Datenbanken, die auch noch auf verschiedenen Server liegen arbeite.

              Kommentar


              • #8
                mysql_db_querry habe ich verwendet, da ich ja mit zwei Datenbanken, die auch noch auf verschiedenen Server liegen arbeite.
                dafür gibts doch bei mysql_query den optionalen 2ten Parameter für den verbindungshandler...

                geht es denn wenn du dein query kopierst und im phpmyadmin ausführst?

                Kommentar


                • #9
                  wenn ich den ausgegeben String in das sql-Fenster im phpmyadmin kopiere klappt alles bestens.

                  Kommentar


                  • #10
                    versuchs mal mit mysql_query(utf8_encode("INSERT INTO..."));

                    Kommentar


                    • #11
                      Hatte ich auch schon probiert.
                      Das Ergebnis sieht dann so aus:
                      Ð?нÑ?оÑ?маÑ?ия по оÑ?оÑ?млениÑ?

                      Kommentar


                      • #12
                        Dann weiss ich auch nicht weiter, vielleicht kann dir ja jemand anders hier noch einen Tipp geben.

                        Aber mal noch was anderes:
                        PHP-Code:
                        // Prüfen ob Eintrag schon vorhanden ist, wenn ja update sonst insert 
                        das geht auch einfacher mit SQL:

                        Code:
                        INSERT INTO ... ON DUPLICATE KEY UPDATE...

                        Kommentar


                        • #13
                          Danke für den Tipp und die Bemühungen. Wenigstens brauche ich nun nicht mehr an meinem Verstand zu zweifeln.

                          Kommentar


                          • #14
                            Hier die Lösung des Problems, der Vollständigheit halber:
                            Ich hatte die beiden Zeilen
                            mysql_query("SET NAMES 'utf8'");
                            mysql_query("SET CHARACTER SET 'utf8'");
                            im code. Nachdem ich
                            mysql_query("SET CHARACTER SET 'utf8'");
                            entfernt hatte ging es.

                            Kommentar

                            Lädt...
                            X