Lazarus, UTF8, Firebird und Default Character Set NONE

Ich habe in den letzten Tagen ein wenig mit Lazarus herumgespielt, um damit eventuell (auf Linux) portierbare Frontends für alte, existierende Datenbanken zu bauen. Dabei bin ich über die Problematik gestolpert, dass Lazarus standardmäßig überall mit UTF8 arbeitet, die alten Datenbanken sich aber um Zeichensätze nicht gekümmert 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ß, wie es funktioniert.

Man hat drei Möglichkeiten, mit dieser Herausforderung umzugehen:

  1. Für neue Projekte legt man die Datenbank selbst („create database ‚/path/to/db/foobar.fdb‘ default character set UTF8;“) und alle Spalten („foo varchar(42) character set UTF8“) direkt als UTF8 an. Dann muss man im mit Lazarus und den Firebird/Interbase-Datenbankkomponenten gebauten Frontend (so gut wie nichts) beachten.
  2. Ältere 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.
  3. Oder man lässt die alte Datenbank in Ruhe und sorgt im neuen Frontend an den entscheidenden Stellen manuell für eine Zeichensatzumwandlung.

Für den dritten Fall ist Folgendes zu tun (ohne Anspruch auf Vollständigkeit):

  • TIBConnection: Die Datenbankverbindung auf CharSet:= ‚ISO8859_1‘ setzen und mittels UseConnectionCharSetIfNone:= True eine automatische Umwandlung von Datenbankinhalten für die visuellen Datenbankkomponenten aktivieren. In einem DBGrid beispielsweise werden deutsche Umlaute dann richtig dargestellt (stünde das hingegen auf False, dann sähe man nur Fragezeichen statt Umlauten)
  • uses … LConvEncoding
  • Bei jeder TSQLQuery müssen Zeichenketten aus dem Frontend in Richtung Datenbank mittels UTF8ToISO_8859_1() umgewandelt werden. Wer sich SQL-Statements also zusammenbaut und dafür die Inhalte von Eingabefelder verwendet, muss die erst einmal durch die Zeichensatzumwandlung jagen.

Eventuell schreibe ich es demnächst noch ausführlicher auf, aber der geneigte Lazarus-Programmierer sollte vielleicht damit schon auf den richtigen Lösungsweg kommen.

Links:

Nextcloud nach Ubuntu-Upgrade kaputt

Nach einem „do-release-upgrade“ von Ubuntu 18.04 auf Ubuntu 20.04 lief die auf diesem System installierte Nextcloud nicht mehr. „Internal Server Error“ hieß es lapidar, die Log-Einträge im Apache-Error-Log waren auch nicht sehr erhellend.

Es zeigte sich, dass vorher vorhandene und auch nachher weiter benötigte PHP-Module vom Ubuntu-Updater nicht wieder installiert wurden. Nach Installation von „php-mysql“ und „php-xml“ kam wenigstens die Nextcloud-Seite wieder hoch und zeigte an, welche weitere PHP-Module alle noch fehlten.

In meinem Falle musste ich die folgenden Module wieder installieren und den obligatorischen Neustart des Apache durchführen:

sudo apt install php-mysql php-xml php-zip php-mbstring php-gd php-curl 
sudo service apache2 restart

Dann war wieder alles gut.

GIMP 2.8 mit Einzelfenstermodus

Mit GIMP bin ich nie wirklich warm geworden. Alleine schon die Tatsache, dass nach dem Start immer gleich die ganze Taskleiste vollgepflastert war, weil alle Toolbars innerhalb eigener Fenster dargestellt wurden, emfand ich als doof.

Mit GIMP 2.8 gibt’s jetzt endlich (bzw. schon länger, aber ich hab’s jetzt zuerst mitbekommen) einen Einzelfenstermodus, so dass ich GIMP mal wieder eine neue Chance geben kann. Ich hab jahrelang PaintShop Pro 7 verwendet, oder IrfanView für die kleinen Dinge wie croppen etc. zwischendurch. An die Bedienung von GIMP muss ich mich erst wieder gewöhnen. Den Screenshot anzufertigen und als JPEG zu exportieren hat bereits eine halbe Ewigkeit gedauert…

Link: https://www.gimp.org