Ankündigung

Einklappen
Keine Ankündigung bisher.

mysql_set_charset - Was soll mir dieses Ergebnis sagen

Einklappen

Neue Werbung 2019

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

  • mysql_set_charset - Was soll mir dieses Ergebnis sagen

    Hallo Leute,
    um Daten in ein FileMaker Datenbank System zu importieren, muss ich die Daten im UTF-8 aus der MySQL Datenbank erhalten.

    Ich habe folgende Abfrage in meiner php Datei

    PHP-Code:
    $conn mysql_connect($dbhostname,$dbusername,$dbpw) or die("Unable to connect to SQL server");
    mysql_select_db($dbname) or die("Unable to select database");

    mysql_set_charset('utf8',$conn); 
    (ich weiß dass ich auf mysqli oder pdo wechseln muss, dass mache ich als Nächstes, ist im Moment aber nicht mein Problem)


    Nach meinem Verständnis sorgt mysql_set_charset dafür, dass ich die Daten immer als UFT-8 erhalten, unabhängig davon, wie die Daten in der MySQL Datenbank vorliegen.

    Nun habe ich folgendes Problem:

    1 x Gambio GX2 Shop
    1 x osCommerce

    Beide wurde ganz normal mit dem dafür vorgesehenen Installer installiert.

    Die Abfrage mit mysql_set_charset('utf8',$conn) führt bei der Gambio Datenbank zu korrekten Umlauten, bei osCommerce werden die Umlaute falsch dargestellt.

    Was ich mir nicht erklären kann: Wieso??

    Schreibt der Gambio Shop die Daten im richtigen Format in die Datenbank, der osCommerce aber nicht?

    Ich habe bisher noch keine falschen Umlaute in einer Datenbank gesehen, wie kann es dazu kommen?

    Ich würde gern den Grund verstehen oder auch "erkennen können", wenn ein Shop fehlerhaft installiert wurde. Kann man Anhand der beiden angehängten Screenshots irgendeine Ursache erkennen?



    Angehängte Dateien

  • #2
    Zitat von Eviandem Beitrag anzeigen
    Was ich mir nicht erklären kann: Wieso??

    Schreibt der Gambio Shop die Daten im richtigen Format in die Datenbank, der osCommerce aber nicht?

    Ich habe bisher noch keine falschen Umlaute in einer Datenbank gesehen, wie kann es dazu kommen?
    MySQL prüft nicht, was es bekommt. Wenn Du sagts, da kommen Daten in Charset X, tatsächlich kommen diese aber im Charset Y, dann hast Du nun Müll in der DB. Alltag.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      In der Beschreibung zu mysql_set_charset steht:
      "Setzt den Standardzeichensatz für die angegebene Verbindung."


      Ok, ich dachte mysql_set_charset wäre auch eine Art "Konverter":

      Wenn die Daten nicht im UTF-8 Format vorliegen, konvertiert mysql_set_charset('utf8',$conn) diese, ansonsten macht es nichts.

      Diese Annahme ist falsch?

      Dann verstehe ich den Sinn von mysql_set_charset nicht.

      Im Falle des Gambio Shops funktioniert es doch scheinbar: Die Daten liegen als Latin1 vor und werden mittels mysql_set_charset als UTF-8 ausgegeben.

      Kommentar


      • #4
        Hinweis:

        Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
        Choosing an API
        Warum man mysql* generell nicht (mehr) nutzen sollte.
        Wie man von mysql* auf PDO umsteigt
        Wissenswertes zum Thema SQL-Injection

        Kommentar


        • #5
          Zitat von Eviandem Beitrag anzeigen
          Wenn die Daten nicht im UTF-8 Format vorliegen, konvertiert mysql_set_charset('utf8',$conn) diese, ansonsten macht es nichts.
          Ja, ist so richtig. Du sagst damit du sprichst UTF8 und die Datenbank konvertiert damit sämtliche Daten automatisch in die passenden Zeichensätze, sowohl beim Lesen als auch beim Schreiben.
          Dabei ist aber essentiell das du auch wirklich UTF8 benutzt. Wenn du der Datenbank sagst du sprichst UTF8, aber dann Queries schickst die Latin sind kommt müll raus. Bei dem Screenshot von osCommerce (wenn die Darstellung korrekt ist) ist genau das umgedrehte passiert. Die Verbindung war Latin-1, aber die Queries UTF8 kodiert.

          Kommentar


          • #6
            Zitat von erc Beitrag anzeigen
            Dabei ist aber essentiell das du auch wirklich UTF8 benutzt. Wenn du der Datenbank sagst du sprichst UTF8, aber dann Queries schickst die Latin sind kommt müll raus.
            Genau. Siehe #2.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von erc Beitrag anzeigen
              Bei dem Screenshot von osCommerce (wenn die Darstellung korrekt ist) ist genau das umgedrehte passiert. Die Verbindung war Latin-1, aber die Queries UTF8 kodiert.
              Aha!

              Und das heißt: Ich habe eine Latin1 Datenbank in der UTF-8 Text steht?

              Nun ist der osCommerce Shop ja ein weltweit bekannter Shop von anderen Entwicklern. Ich habe keinen Einfluss darauf, wie das Shop Script die Daten in der Datenbank ablegt, weil ich den php Code ja gar nicht geschrieben habe. Der Screenshot ist lediglich ein Programm zum betrachten der Daten, die vorher von einem User ganz normal über dem Browser eingegeben wurde.

              Kommentar


              • #8
                Dann wirst du wohl die Art der Verbindung des Systems nachstellen müssen, also zwar "latin1" aus der Datenbank ziehen aber dann damit arbeiten als wäre es UTF8 (was es ja im endeffekt ist).
                [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                Kommentar


                • #9
                  OK, verstehe.

                  Wir haben leider hin- und wieder einen Kunden, der seinen Shop so aufgesetzt hat, dass falsche Zeichen aus dem Shop in seiner Datenbank gespeichert sind.

                  Wir selber setzen die Shops nie auf, die Kunden kommen immer mit Ihren Shops zu uns.

                  Wir sind FileMaker Programmierer und haben eine php Schnittstelle, um die Daten aus den Shops der Kunden zu importieren.


                  Unser Ziel war es jetzt, die Schnittstelle so zu programmieren, dass wir die Daten von Kunden mit richtig konfigurierten Shops und auch von Kunden mit falsch konfigurierten Shops übernehmen können.

                  Gibt es dafür eine Lösung, oder muss man immer WISSEN, in welchem Zeichensatz die Daten in der Datenbank vorliegen?

                  Kommentar


                  • #10
                    Zitat von Eviandem Beitrag anzeigen
                    Und das heißt: Ich habe eine Latin1 Datenbank in der UTF-8 Text steht?
                    Könnte man so ausdrücken. Man könnte aber auch sagen man hat Müll in der Datenbank, was die Sache eher trifft.

                    Zitat von Eviandem Beitrag anzeigen
                    Gibt es dafür eine Lösung, oder muss man immer WISSEN, in welchem Zeichensatz die Daten in der Datenbank vorliegen?
                    Die Lösung ist das eigentliche Problem zu korrigieren. Mir ist natürlich klar das das als externer Anbieter nicht wirklich möglich ist, aber ansonsten kannst du nur rumpfuschen. Du kannst versuchen Kodierungsfehler zu erkennen und entsprechend konvertieren.

                    Kommentar

                    Lädt...
                    X