pySQLite und Umlaute (Unicode, UTF-8)

SQLite ist eine recht feine Datenbank. Und wenn man weiß, wie man Umlaute in die Datenbank bekommt und diese auch wieder so raus kriegt, wie man sie haben möchte, dann ist pySQLite gleich noch ein wenig sympathischer. ;-) Dieses Tutorial trägt hoffentlich positiv dazu bei.

SQLite speichert intern alles im UTF-8-Format ab. Es gibt aber einen Unterschied zwischen SQLite der Datenbank und pySQLite der Datenbankschnittstelle. SQLite arbeitet standardmäßig mit UTF-8. pySQLite, in den neueren Versionen, erwartet UTF-8 oder UNICODE und gibt immer UNICODE zurück (oder versucht es zumindest).

Meine Tests mit pySQLite Version 2.3.2 haben ergeben, dass es egal ist, ob man pySQLite mit einem UTF-8-String oder mit einem UNICODE-String füttert. Einen UTF-8-String muss pySQLite nicht mehr nach UTF-8 umwandeln. Das ist der einzige Unterschied.

Füttert man pySQLite aber mit einem anders kodierten String, der noch dazu ein Sonderzeichen oder ein Umlaut enthält, dann bekommt man spätestens dann einen Fehler zurück, wenn man versucht diesen String wieder aus der Datenbank auszulesen. pySQLite versucht uns wieder einen UNICODE-String zurück zu geben. Bei diesem Umwandlungsversuch wird ein Fehler ausgelöst, da pySQLite es nicht schafft, diesen String nach UNICODE umzuwandeln. Es geht einfach davon aus, dass auch wirklich UTF-8 in der Datenbank steht.

Eine saubere Sache :-)

UNICODE --> pySQLite --> UNICODE

Etwas schneller, wenn alle Daten bereits im UTF-8-Format vorliegen :-)

UTF-8 --> pySQLite --> UNICODE

Das funktioniert nicht, wenn Sonderzeichen oder Umlaute im String enthalten sind :-(

LATIN1 --> pySQLite --> UNICODE