MySQL CharacterSet festlegen

  1. 10 months ago

    Andy M

    8 Sep 2018 Pre-Release Testers, Xojo Pro Monheim am Rhein, Germany

    Hallo,
    in meiner Lösung tausche ich Daten zwischen der lokalen SQLite und einer MySQL Datenbank aus.
    Ich bekomme es einfach nicht hin, dass das bei MySQL CharcterSet auf UTF8 läuft. Entsprechend habe ich Probleme mit
    bestimmten Zeichen. Umlaute funktionieren, dass €-Zeichen aber nicht.

    Schau ich die Daten im Debugger an, ist das Encoding im RecordSet immer NIL.

    Das ist mein Code zu Anmeldung:

    dim tmpDB as new MySQLCommunityServer
    tmpDB.Host = DBHost
    tmpDB.Port = 3306
    tmpDB.UserName = DBUser
    tmpDB.Password = DBPassword
    tmpDB.DatabaseName = DBName

    If tmpDB.Connect Then
    tmpDB.SQLExecute("set names utf8 collate utf8_general_ci")
    tmpDB.SQLExecute("SET CHARSET 'utf8'")
    end if

    Ich habe schon alle möglichen Befehle versucht, ohne jeden Erfolg. Das Encoding im Record Set bleibt immer NIL.

    Hat jemand eine Idee wo ich noch was ändern kann?

    Viele Grüße
    Andreas

  2. Maximilian T

    8 Sep 2018 Pre-Release Testers, Xojo Pro Europe, Germany, Berlin

    Probier mal

    StringFromDB=DefineEncoding(Rs.field("SomeField").stringvalue,Encodings.UTF8)

  3. Christian S

    9 Sep 2018 Pre-Release Testers, Xojo Pro, XDC Speakers Germany

    Das Xojo Plugin liefert alle strings ohne encoding. Du musst also ConvertEncoding nehmen für alle strings Richtung Datenbank und dann defineEncoding für alle zurück. Plus das set names, damit die Datenbankverbindung UTF-8 macht.

    Beim MBS SQL Plugin geht das automatisch, da wir die Unicode API nehmen und nie so Probleme haben.

  4. Andy M

    9 Sep 2018 Pre-Release Testers, Xojo Pro Monheim am Rhein, Germany

    Danke für die Antworten. Da hätte ich lange suchen können...

  5. Andy M

    9 Sep 2018 Pre-Release Testers, Xojo Pro Monheim am Rhein, Germany

    Doch noch eine Frage, den so ganz tut's noch nicht.
    Wenn ich mit ConvertEncoding Daten auf die MySQL Datenbank schreibe, welches Coding gebe ich dann an?

    UTF8 macht keinen Sinn, da das Coding in der lokalen Datenbank ja schon UTF8 ist.
    Es funktioniert auch mit UTF8 nicht.

  6. Christian S

    9 Sep 2018 Pre-Release Testers, Xojo Pro, XDC Speakers Germany

    UTF-8 am Besten.

    ConvertEncoding stellt ja nur sicher, dass der String das Encoding hat.
    Wenn der das schon vorher hatte, kommt der gleiche String zurück.

  7. Andy M

    9 Sep 2018 Pre-Release Testers, Xojo Pro Monheim am Rhein, Germany

    OK, so langsam komme ich dem Problem näher.
    Starte ich meine Applikation und rufe die Daten vom MySQL Server ab, kann ich Sie mit DefineEncoding sauber speichern. Alle Sonderzeichen werden korrekt übernommen.

    Rufe ich die gleiche Methode ein zweites Mal auf, klappt das nicht mehr. (Die MySQL DB wurde nicht verändert.)
    Setze ich das Encoding beim ersten Aufruf im Debugger auf UTF8, sehen ich die Sonderzeichen wie sie sein sollen.
    Beim 2. Aufruf muss ich das Encoding auf Windows-1252 setzen um die Sonderzeichen korrekt zu sehen. Dann klappt auch DefineEncoding nicht mehr.

    Irgendeine Idee?

or Sign Up to reply!