{"id":2073,"date":"2022-11-24T18:00:20","date_gmt":"2022-11-24T17:00:20","guid":{"rendered":"https:\/\/www.dirk-hagedorn.de\/?p=2073"},"modified":"2022-11-24T12:04:00","modified_gmt":"2022-11-24T11:04:00","slug":"lazarus-utf8-firebird-und-default-character-set-none","status":"publish","type":"post","link":"https:\/\/www.dirk-hagedorn.de\/?p=2073","title":{"rendered":"Lazarus, UTF8, Firebird und Default Character Set NONE"},"content":{"rendered":"<p>Ich habe in den letzten Tagen ein wenig mit Lazarus herumgespielt, um damit eventuell (auf Linux) portierbare Frontends f\u00fcr alte, existierende Datenbanken zu bauen. Dabei bin ich \u00fcber die Problematik gestolpert, dass Lazarus standardm\u00e4\u00dfig \u00fcberall mit UTF8 arbeitet, die alten Datenbanken sich aber um Zeichens\u00e4tze nicht gek\u00fcmmert haben. Alte Frontends liefen unter Windows irgendwie mit einem Zeichensatz vergleichbar (identisch?) mit ISO Latin 1 (a.k.a ISO 8859-1), der Firebird-Datenbank war es eh egal, was an Zeichen rausgeholt und darin gesichert wurde, kurzum: passte alles. Mit Lazarus\/UTF8 und alten Datenbankinhalten in Latin-1 wird alles ein wenig herausfordernder. Aber letztlich ist das alles nichts wirklich Wildes, wenn man wei\u00df, wie es funktioniert.<\/p>\n<p>Man hat drei M\u00f6glichkeiten, mit dieser Herausforderung umzugehen:<\/p>\n<ol>\n<li>F\u00fcr neue Projekte legt man die Datenbank selbst (&#8222;create database &#8218;\/path\/to\/db\/foobar.fdb&#8216; default character set UTF8;&#8220;) und alle Spalten (&#8222;foo varchar(42) character set UTF8&#8220;) direkt als UTF8 an. Dann muss man im mit Lazarus und den Firebird\/Interbase-Datenbankkomponenten gebauten Frontend (so gut wie nichts) beachten. <\/li>\n<li>\u00c4ltere Datenbanken konvertiert man komplett mit allen Spalten und allen Inhalten von NONE auf UTF8. Dann hat man wie oben im Frontend auch Ruhe, aber solch eine Konvertierung kann in Arbeit ausarten.<\/li>\n<li>Oder man l\u00e4sst die alte Datenbank in Ruhe und sorgt im neuen Frontend an den entscheidenden Stellen manuell f\u00fcr eine Zeichensatzumwandlung.<\/li>\n<\/ol>\n<p>F\u00fcr den dritten Fall ist Folgendes zu tun (ohne Anspruch auf Vollst\u00e4ndigkeit):<\/p>\n<ul>\n<li>TIBConnection: Die Datenbankverbindung auf CharSet:= &#8218;ISO8859_1&#8216; setzen und mittels UseConnectionCharSetIfNone:= True eine automatische Umwandlung von Datenbankinhalten f\u00fcr die visuellen Datenbankkomponenten aktivieren. In einem DBGrid beispielsweise werden deutsche Umlaute dann richtig dargestellt (st\u00fcnde das hingegen auf False, dann s\u00e4he man nur Fragezeichen statt Umlauten)<\/li>\n<li>uses &#8230; LConvEncoding<\/li>\n<li>Bei jeder TSQLQuery m\u00fcssen Zeichenketten aus dem Frontend in Richtung Datenbank mittels UTF8ToISO_8859_1() umgewandelt werden. Wer sich SQL-Statements also zusammenbaut und daf\u00fcr die Inhalte von Eingabefelder verwendet, muss die erst einmal durch die Zeichensatzumwandlung jagen.<\/li>\n<\/ul>\n<p>Eventuell schreibe ich es demn\u00e4chst noch ausf\u00fchrlicher auf, aber der geneigte Lazarus-Programmierer sollte vielleicht damit schon auf den richtigen L\u00f6sungsweg kommen.<\/p>\n<p>Links:<\/p>\n<ul>\n<li>Lazarus: <a href=\"https:\/\/www.lazarus-ide.org\/\" rel=\"noopener\" target=\"_blank\">https:\/\/www.lazarus-ide.org\/<\/a><\/li>\n<li>Firebird: <a href=\"https:\/\/firebirdsql.org\/\" rel=\"noopener\" target=\"_blank\">https:\/\/firebirdsql.org\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe in den letzten Tagen ein wenig mit Lazarus herumgespielt, um damit eventuell (auf Linux) portierbare Frontends f\u00fcr alte, existierende Datenbanken zu bauen. Dabei bin ich \u00fcber die Problematik gestolpert, dass Lazarus standardm\u00e4\u00dfig \u00fcberall mit UTF8 arbeitet, die alten Datenbanken sich aber um Zeichens\u00e4tze nicht gek\u00fcmmert haben. Alte Frontends liefen unter Windows irgendwie mit <a class=\"more-link\" href=\"https:\/\/www.dirk-hagedorn.de\/?p=2073\">Weiterlesen\u00a0\u2026<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,6,184,404],"tags":[333,437],"class_list":["post-2073","post","type-post","status-publish","format-standard","hentry","category-linux","category-software","category-tutorial","category-windows","tag-firebird","tag-lazarus"],"_links":{"self":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/posts\/2073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2073"}],"version-history":[{"count":4,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/posts\/2073\/revisions"}],"predecessor-version":[{"id":2077,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/posts\/2073\/revisions\/2077"}],"wp:attachment":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}