Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL SELECT mit Umlauten (UTF-8 - Latin 1)

Einklappen

Neue Werbung 2019

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

  • MySQL SELECT mit Umlauten (UTF-8 - Latin 1)

    Abend allerseits,
    ich habe ein Problem, was mich schon länger beschäftigt und bei dem ich nach langem Umschauen bislang keine Lösung finden konnte.

    Daher möchte ich jetzt um Rat/Hilfe bitten.

    Zunächst möchte ich mal meine Vorgehensweise erklären, um das Problem zu reproduzieren:

    -Eine in ANSI Kodierung geschriebene Datei(xml) wird mittels LUA Script(Konverter) in SQL Zeilen formatiert, dabei bleibt die Kodierung gleich(ANSI)
    -Datenbank vom Server hat als charset utf-8, die Tabelle auch
    -Website script (UTF-8 )/ meta charset = utf-8 + folgende Zeilen:
    PHP-Code:
    $strQuery "SET character_set_results = 'utf8', 
                  character_set_client = 'utf8', 
                  character_set_connection = 'utf8', 
                  character_set_database = 'utf8', 
                  character_set_server = 'utf8'"
    ;
            
    mysql_query($strQuery); 
            
    mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'") or die(mysql_error()); 
    -Die vorher angesprochene Datei (in Querry formatiert mit ANSI Kodierung) wird im mysql Client (navicat) ausgeführt und als encoding nehme ich utf-8
    -Im Mysql Client(navicat) werden alle Umlaute richtig dargestellt, auf der Website/Mysql Server jedoch nicht

    Was ich bisher probiert habe:
    Mysql-Server auf latin1 stellen, DB auf latin1 stellen, Datei auf Utf-8 kodieren (alle Umlaute anpassen), Datei-Encoding (im Mysql Client) utf-8/ANSI Latin1/iso-8859-1 verwenden, website script (ANSI,meta charset ANSI, querry ANSI).
    Als Anleitung habe ich diesen Link benutzt.

    Ich hab also viele Kombinationen probiert einfach, weil ich dieses Kodierungsthema noch nicht ganz verstehe.

    Wenn ich zu dem Punkt angelange, dass die Website/der Mysql Server alle Zeichen richtig interpretiert (etwa bei UTF-8 Kodierung der Datei),
    funktioniert die Anzeige in der Datenbank (mysql Client: navicat) und im gewünschten System nicht mehr. Es greifen also zwei unterschiedliche Systeme:
    Website/Sonstiges auf die Datenbank zu, wobei beide den Datensatz unterschiedlich interpretieren. Ich habe gelesen, dass es ja nach OS, anders
    interpretiert wird und es demnach daran liegen könnte. Nur ist jetzt die Frage, wie ich eine einheitliche Kodierung schaffe, die in beiden Fällen
    übereinstimmt.

    Ich hoffe die Problembeschreibung ist ausführlich/verständlich genug.
    Ich bin sehr verbunden für schnelle Antworten.

    Gruße,
    Brese

  • #2
    Wenn ich dich richtig verstehe liegt das Problem daran, das du die Daten falsch in die Datenbank einträgst. Du magst ihnen zwar dort dann das Label "UTF-8" anhängen, das ändert aber nichts daran das sie nicht UTF-8 sind, wenn sie es vorher nicht waren. Wenn du einen anderen Zeichensatz haben willst, musst du den auch explizit, am besten beim Eintragen, entsprechend umwandeln. CONVERT() und CAST() müssten die richtigen MySQL-Funktionen dafür sein, falls das mit LUA nicht bequemer geht.

    Kommentar


    • #3
      Ok ich überlege mir gerade, evtl. den Konverter umzuschreiben in php und dann werde ich auch deine genannten Funktionen verwenden.
      Kannst du mir dennoch den Ablauf schildern, wie die Datei bis zur Datenbank konvertiert sein muss und welche Einstellungen, da übernommen werden müssen (Client+Datenbank,Webserver).

      Gruß,
      Brese

      Kommentar


      • #4
        Zitat von Brese Beitrag anzeigen
        Ok ich überlege mir gerade, evtl. den Konverter umzuschreiben in php und dann werde ich auch deine genannten Funktionen verwenden.
        In PHP kannst du einfach schon vorher [MAN]utf8_encode[/MAN] verwenden. Ist vermutlich bequemer.

        Ansonsten musst du da eigentlich nichts ändern, wenn du UTF-8 durchgehend verwendest.

        Du musst nur einmal - an welcher Stelle auch immer - von latin1 auf UTF-8 konvertieren, idealerweise beim Eintragen in die Datenbank.

        Dein jetziges Problem scheint nur das zu sein, das die Daten nicht UTF-8 sind, du sie aber als UTF-8 behandelst. Wenn du die Daten auf UTF-8 umwandelst, sind sie UTF-8 und die Behandlung als UTF-8 ist dementsprechend auch korrekt.

        Kommentar


        • #5
          Ok danke ich versuche das.

          Kommentar


          • #6
            *Edit*:
            Diese wird jetzt unter (utf-8 encoding, utf8 tabelle, utf8 db) falsch interpretiert.
            Auf der Website zwar richtig aber im mysql Client (navicat) wiederum falsch. Dasselbe Problem besteht also weiterhin. Vielleicht sagt das ja was aus, die Spalte, um die es sich handelt ist als 'varbinary' eingestellt.

            Kommentar


            • #7
              Zitat von Brese Beitrag anzeigen
              -Die vorher angesprochene Datei (in Querry formatiert mit ANSI Kodierung) wird im mysql Client (navicat) ausgeführt und als encoding nehme ich utf-8
              Du weißt das die Queries ISO 8859 codiert sind, aber sagst der Datenbank das sie UTF8 codiert sind!?

              Zitat von Brese Beitrag anzeigen
              um die es sich handelt ist als 'varbinary' eingestellt.
              Was damit aber auch Jacke wie Hose ist. Bei Binärdaten spielt der Zeichensatz natürlich überhaupt keine Rolle für die Datenbank, die Daten werden 1:1 abgebildet. Warum speicherst du also offensichtlich Strings als Binärwerte?

              Kommentar

              Lädt...
              X