[ERLEDIGT] MySQL Abfrage aus PureBasic deutsche Umlaute

Für allgemeine Fragen zur Programmierung mit PureBasic.
basiszero
Beiträge: 13
Registriert: 08.02.2016 13:12

[ERLEDIGT] MySQL Abfrage aus PureBasic deutsche Umlaute

Beitrag von basiszero »

Hallo zusammen,

ich arbeite mit PurBasic in der Verson 5.71 LTS und mit einem MySQL-Server in der Version 5.0.12-dev - 20150407.

Hier der vollständigkeitshalber eine Beispielabfrage

Code: Alles auswählen

UseMySQLDatabase()

  ; Sie sollten einen Server als 'Localhost' laufen haben
  ;
  If OpenDatabase(0, "host=123.187.131.1 port=3307 dbname=test", "test", "test")
    
  If DatabaseQuery(0, "SELECT * FROM tab_test")  

    While NextDatabaseRow(0)  
      Debug GetDatabaseString(0, 0) + " " + GetDatabaseString(0, 1) + " " + GetDatabaseString(0, 2) + " " + GetDatabaseString(0, 3)  
    Wend

    FinishDatabaseQuery(0)
  Else
    MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: "+DatabaseError())
  EndIf
  CloseDatabase(0)              
  Else
    Debug "Verbindung fehlgeschlagen: "+DatabaseError()
  EndIf

Mein Problem ist jetzt, egal welchen Zeichensatz/Kollation ich einstelle bzw. in der DB benutzte (UTF-8, ISO, Latin ),
es werden keine Umlaute korrekt aus der DB wiedergeben.

Abfragen z.B. über PHP oder HeidiSQL sind aber in Ordnung.

Das selbe habe ich nochmal mit einer Maria DB in der Version 10.4 ausprobiert, leider mit dem selben Ergebnis.

Hat jemand ne Idee ??

Bin für jeden Tip dankbar :D
Zuletzt geändert von basiszero am 05.03.2020 09:09, insgesamt 1-mal geändert.
hoerbie
Beiträge: 36
Registriert: 06.12.2013 13:53

Re: MySQL Abfrage aus PureBasic keine deutschen Umlaute

Beitrag von hoerbie »

Hi,

ich hab noch nix mit den Database-Funktionen von PB gemacht, aber viel mit Php/Perl/MySql und unterschiedlichsten DBs dort. Da hilft meist bei Umlaut-Problemen direkt nach dem Connect ein Befehl wie

SET NAMES latin1
oder
SET NAMES utf8

Hast Du explizit für die aus PB aufgebaute Verbindung schon versucht, den gewünschten Zeichensatz so zu setzen, oder nur direkt im MySql rumgestellt?

Gruß, hoerbie
basiszero
Beiträge: 13
Registriert: 08.02.2016 13:12

Re: MySQL Abfrage aus PureBasic keine deutschen Umlaute

Beitrag von basiszero »

Hallo hoerbie,

Danke für deine Info, aber laut mysql.ini sieht für meine Begriffe alles gut aus, oder ?

Code: Alles auswählen


[client]
default-character-set=UTF8

[mysqladmin]
user=root
port=3307

# The MySQL server
[mysqld]
# set basedir to your installation path
basedir="D:/Bitnami/wampstack-7.3.13-0/mysql"
# set datadir to the location of your data directory
datadir="D:/Bitnami/wampstack-7.3.13-0/mysql/data"
port=3307
max_allowed_packet=32M
#bind-address=127.0.0.1
bind-address=0.0.0.0
expire_logs_days=7
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB

log-error="D:/Bitnami/wampstack-7.3.13-0/mysql/data/mysqld.log"
default-authentication-plugin=mysql_native_password
[mysqldump]
max_allowed_packet=32M

[mysql]
port=3307


Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: MySQL Abfrage aus PureBasic keine deutschen Umlaute

Beitrag von #NULL »

Auch überprüfen, ob der Font des Debug-Fensters die Zeichen überhaupt darstellen kann.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MySQL Abfrage aus PureBasic keine deutschen Umlaute

Beitrag von mk-soft »

Habe hier keine Probleme mit Umlauten.

PB: v5.71 (x64)

Buffalo NAS:
MySQL-Server v5.0.70
MySQL-Zeichensatz: UTF-8 Unicode (utf8)

Code: Alles auswählen

;-TOP

;IncludeFile "mysql.pbi"

; ---------------------------------------------------------------------------------------

CompilerIf #PB_Compiler_OS = #PB_OS_MacOS

  Procedure.s GetAppPath()
    Protected bundlePathPtr = CocoaMessage(0,CocoaMessage(0,CocoaMessage(0,0,"NSBundle mainBundle"),"bundlePath"),"UTF8String")
    If bundlePathPtr
      Protected bundlePath.s = PeekS(bundlePathPtr,-1,#PB_UTF8) + "/"
    EndIf
    ProcedureReturn bundlePath
  EndProcedure
  
  ; ---------------------------------------------------------------------------------------
  
  Procedure.s GetResourcePath()
    Protected bundlePathPtr = CocoaMessage(0,CocoaMessage(0,CocoaMessage(0,0,"NSBundle mainBundle"),"resourcePath"),"UTF8String")
    If bundlePathPtr
      Protected bundlePath.s = PeekS(bundlePathPtr,-1,#PB_UTF8) + "/"
    EndIf
    ProcedureReturn bundlePath
  EndProcedure
  
  ; ---------------------------------------------------------------------------------------
  
  
  libdb.s = GetAppPath() + "Contents/Library/libmariadb.dylib"
  
  
  If UseMySQLDatabase(libdb) = 0
    Debug "Error MySQL"
    End
  EndIf
  
CompilerElse
  
    If UseMySQLDatabase() = 0
    Debug "Error MySQL"
    End
  EndIf
  
CompilerEndIf


UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
  Result = DatabaseUpdate(Database, Query$)
  If Result = 0
    Debug "Error Update: " + DatabaseError() + #LF$ + Query$
  EndIf
  
  ProcedureReturn Result
EndProcedure

Procedure CheckDatabaseQuery(Database, Query$)
  Result = DatabaseQuery(Database, Query$)
  If Result = 0
    Debug "Error Query: " + DatabaseError() + #LF$ + Query$
  EndIf
  
  ProcedureReturn Result
EndProcedure

database.s = "host=server port=3306 dbname=developer"
user.s = "user"
pass.s = "*"

CompilerIf Defined(PB_Database_MySQL, #PB_Constant) = 0
  #PB_Database_MySQL = 4
CompilerEndIf
    
If OpenDatabase(0, database, user, pass, #PB_Database_MySQL)
  CheckDatabaseUpdate(0, "CREATE TABLE IF NOT EXISTS food (name CHAR(50), weight INT)")
  CheckDatabaseUpdate(0, "DELETE FROM food")
  
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple äöü', '12')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '25')")
  
  If CheckDatabaseQuery(0, "SELECT * FROM food WHERE weight > 0")
    While NextDatabaseRow(0)
      Debug "Food = " + GetDatabaseString(0, 0) + " Weight = " + GetDatabaseLong(0, 1)
    Wend
    FinishDatabaseQuery(0)
  EndIf
  
  CloseDatabase(0)
Else
  Debug "Can't open database !"
  CallDebugger
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
basiszero
Beiträge: 13
Registriert: 08.02.2016 13:12

Re: MySQL Abfrage aus PureBasic keine deutschen Umlaute

Beitrag von basiszero »

Guten Morgen,

herzlichen Dank für die Rückmeldungen....

Nach längeren testen gestern kam ich zu einer "verrückten" Feststellung.

Ich habe mit PhpMyAdmin, mit dem Mysql-Consolen -Client und PureBasic Eingaben
mit Umlauten in die DB geschrieben.

Jedes Programm gab auch die Umlaute korrekt wieder zurück, aber...

Wenn ich die Ddaten z.B. von einem PB Eintrag in der MySQL Console ausgeben lassen stimmen die Umlaute
schon nicht mehr. Also mit anderen Worten, Umlaute werden nur richtig dargestellt, wenn das Eingabe- und
Ausgabeprogramm das selbige ist.

Ich denke somit hat die Frage hier im Forum eigentlich nichts zu suchen. Sorry... :(

Wenn aber jemand dazu ne Idee hat, wäre natürich super.... :allright:
hoerbie
Beiträge: 36
Registriert: 06.12.2013 13:53

Re: MySQL Abfrage aus PureBasic keine deutschen Umlaute

Beitrag von hoerbie »

Generell sieht Deine Konfiguration mit dem [client] usw. nicht verkehrt aus. Trotzdem könnte es sein, daß Dir auf PB-Ebene oder den von PB genutzten Funktionen irgendwas dazwischenfunkt, insbesondere wenn ich die Windows-Pfade sehe...

Ich würde an Deiner Stelle also wirklich nach dem Verbindungsaufbau in PB nochmal eine explizite Angabe des gewünschten Zeichensatzes probieren mit den von mir genannten Befehlen, die solltest Du mittels

Code: Alles auswählen

DatabaseUpdate(0,"SET NAMES utf8")
o.Ä. an sich nutzen können.

Und dann wirklich wie von #Null angeregt auch drauf achten, wo Du die erhaltenen Daten ausgibst, im Debug-Fenster könnte es da trotz an sich korrekt erhaltenen Daten auch noch Ausgabefehler geben.

Ansonsten solltest Du mal konkret zeigen, was Du denn in PB aus offensichtlich von anderen Tools korrekt gesetzten/eingelesenen Umlauten zurück bekommst, oder wie von PB gesetzte Umlaute in den anderen Tools angezeigt werden.
basiszero
Beiträge: 13
Registriert: 08.02.2016 13:12

Re: MySQL Abfrage aus PureBasic keine deutschen Umlaute

Beitrag von basiszero »

Guten Morgen hoerbie,

da wird ja der Hund in der Pfanne verrückt... :bounce:

Du hast Recht, mit deinem Eintrag hat das Ganze jetzt funktioniert :allright:
Von der Logik her für mich nicht wirklich nachvollziehbar, aber... EGAL!!

Herzlichen Dank für deine Hilfe !!!! :mrgreen:
babelfish
Beiträge: 57
Registriert: 08.07.2009 10:53

Re: [ERLEDIGT] MySQL Abfrage aus PureBasic deutsche Umlaute

Beitrag von babelfish »

na halleluja ...

Das selbige Problem hatte ich auch - aber dachte das wäre es spezifisches OSX-Problem.

viewtopic.php?f=28&t=31318&p=359447#p359447
Hauptsächlich Purebasic für OSX
Antworten