Hallo zusammen,
ich habe eine Postgresql-DB mit UTF-8 Kodierung angelegt. Das Abspeichern von Texten mit Umlauten oder anderen Sonderzeichen klappt auch:
Wenn ich nun mit pgcrypto verschlüssel, erhalte ich die Sonderzeichen in einem anderen Format wieder.Code:db1=# create table tabelle2 (plaintext text); CREATE TABLE db1=# insert into tabelle2 (plaintext) values ('Müller'); INSERT 0 1 db1=# select * from tabelle2; plaintext ----------- Müller (1 Zeile)
Habt ihr einen Tipp für mich?Code:db1=# create table tabelle1 (cryptedtext bytea); CREATE TABLE db1=# insert into tabelle1 (cryptedtext) values (encrypt('Müller', 'password', 'aes')); INSERT 0 1 db=# select * from tabelle1; cryptedtext ------------------------------------------------ ^jH\355\375\256\230\016E\210\366B=\364\220\034 (1 Zeile) db1=# select encode(decrypt(cryptedtext, decode('password', text 'escape'), text 'aes'), text 'escape') as cryptedtext from tabelle1; cryptedtext --------------- M\303\274ller (1 Zeile)
Ich meine jetzt den Grund gefunden zu haben. Sonderzeichen werden im UTF-8 mit Backslash und einer dreistelligen Zahl kodiert. Beim Speichern in der Datenbank wird noch ein weiterer Backslash hinzugefügt. Beim Auslesen werden die beiden Backslashs als Backslash interpretiert und die nachfolgende dreistellige Zahl als drei einzelne Ziffern.
Ich glaube, ich kann es nur so lösen, indem ich die Sonderzeichen vermeide, also einen base64-String erzeuge und ihn dann abspeichere.
Ich dachte zuerst, vor dem Speichern noch encode('Müller', 'base64') aufzurufen. Aber das bringt leider keine Änderung.
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen