Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLite-Datenbank nimmt keine Umlaute an (komische Zeichen) (https://www.delphipraxis.net/77419-sqlite-datenbank-nimmt-keine-umlaute-komische-zeichen.html)

s.h.a.r.k 19. Sep 2006 12:03

Datenbank: SQLite • Version: 3.3.7 • Zugriff über: libsql (v0.64)

SQLite-Datenbank nimmt keine Umlaute an (komische Zeichen)
 
Hallo,

und zwar habe ich das folgende Problem, dass wenn ich ein Query mache und einen Text in die Datenbank eintrage, welcher Umlaute, d.h. ü, ö, ä enthält, so wird nicht genau dieses Zeichen dort gespeichert, sondern zwei andere Zeichen, die dem Buchstaben ö, ü, ä entsprechen. Das will ich aber nicht haben! Ich will Umlaute und nicht irgendetwas anderes gepspeichert haben.

In der Komponenten libsql gibt es die Einstellunge Unicode : Boolean - wenn ich es auf True setze, dann wird scheinbar im Unicode-Format gespeichert und wenn ich es auf False setze im UTF-8-Format. Nur werden die Umlaute bei beiden Einstellungen nicht richtig gespeichert -> komische Zeichen...

Ich hoffe ihr könnt mir weiterhelfen - ich bin am verzweifeln. So schwer kann das doch nicht sein, oder?!

mfg shark

mkinzler 19. Sep 2006 12:07

Re: SQLite-Datenbank nimmt keine Umlaute an (komische Zeiche
 
Was für einen Zeichensatz? Welche Komponenetn (sind diese Unicodefähig)?

s.h.a.r.k 19. Sep 2006 12:15

Re: SQLite-Datenbank nimmt keine Umlaute an (komische Zeiche
 
Komponenten? Ich nutze halt SQLite, davon die DLL für die Embedded-Datenbank (Version 3.3.7). Den Zugriff nehme ich mit libsql vor (Version 0.64). libsql stellt mir die Klasse TLiteDB zur Verfügung, über die ich die DLL einbinden, Querys versenden und sonstige Sachen machen kann. Dort kann ich auch die oben genannte Einstellnugen "Unicode : Boolean" vornehmen (True -> Unicode; False -> UTF-8), nur ändert sich durch diese Einstellungen nichts.

Einen String speichere ich so:
Delphi-Quellcode:
db.Query('INSERT INTO testtable (testtext) VALUES (''öüäasd'');')
Nur es wird leider kein Umlaut so gespeichert wie es sein sollte...

mkinzler 19. Sep 2006 12:20

Re: SQLite-Datenbank nimmt keine Umlaute an (komische Zeiche
 
Ich vermutete das es im Programm falsch angezeigt werden würde und meinte die Anzeigekomponenten.

s.h.a.r.k 19. Sep 2006 13:48

Re: SQLite-Datenbank nimmt keine Umlaute an (komische Zeiche
 
Das Problem hat sich gerade gelöst. Weiß zwar nicht wirklich warum, aber auf einmal hat es geklappt... :gruebel:

zaphod 20. Sep 2006 10:54

Re: SQLite-Datenbank nimmt keine Umlaute an (komische Zeiche
 
Hallo,

soweit ich weiß arbeitet sqlite intern im UTF-8 Format. An deiner Stelle würd ich mal probieren, Unicode auf False zu setzen und alle Strings die rein bzw. rausgehen ins UTF-8 Format bzw. zurück ins Ansi Format zu konvertieren.

D.h. aus
Delphi-Quellcode:
db.Query('INSERT INTO testtable (testtext) VALUES (''öüäasd'');')
wird:
Delphi-Quellcode:
db.Query(AnsiToUTF8('INSERT INTO testtable (testtext) VALUES (''öüäasd'');'))
Das Ergebnis eines SELECT statements muss dann mit
Delphi-Quellcode:
UTF8ToAnsi()
zurückkonvertiert werden.

Gruß
zaphod

zaphod 20. Sep 2006 11:01

Re: SQLite-Datenbank nimmt keine Umlaute an (komische Zeiche
 
Zitat:

Zitat von s.h.a.r.k
Das Problem hat sich gerade gelöst. Weiß zwar nicht wirklich warum, aber auf einmal hat es geklappt... :gruebel:

Ja, letztendlich ist es wahrscheinlich wurscht, wenn man die sqlite3 DB mit keiner anderen Applikation bearbeitet. Wenn man nur Ansi Code reinschreibt, müsste man auch nur Ansi Code rausbekommen und sqlite dürfte sich nicht stören ob ein 'ä' wirklich als UTF-8 'ä' in der Datenbank steht...

Gruß
zaphod

Miggi 5. Mai 2011 09:57

AW: SQLite-Datenbank nimmt keine Umlaute an (komische Zeichen)
 
Vielen Dank an Zapod,

ich stand vor dem gleichen Problem mit den "umgewandelten" Zeichen.. das passiert aber bei allen Zeichen des erweiterten Zeichensatzes ® Ø usw.
selbst der wirklich klasse "SQLite Administrator" (kann ich jedem nur empfehlen der mit SQLITE3 Datenbanken zu tun hat und ist kostenlos!),
hat das nicht korrekt angezeigt...

http://sqliteadmin.orbmu2k.de/


nun konvertiere ich beim Laden mittels Callback-Routine einfach das Datenfeld vor Anzeige zurück
mittels UTF8ToAnsi() und es klappt..


Super!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz