Hallo,
für eine FB-Tabelle habe ich ein Feld erstellt:
iGuid VARCHAR(16) CHARACTER SET OCTETS COLLATE OCTETS
mit einem entsprechenden Trigger
If (new.iGUID is null) then new.iGUID = gen_uuid()
Dies funktioniert auch.
Schaue ich mir den Inhalt an, so enthalten die Felder eine kryptische Zeichenfolge wie
-> '7CŽ[¯H‰¯8'
Unter NexusDB (mit Delphi) gibt es praktischer Weise sowas fertig (Guid-Feldtype und ein Default Descriptor)
und die Zeichenfolge im entsprechenden Feld sieht dann auch so aus, wie ich es erwarten würde:
{8B1B1FD5-4694-4205-992C-38B29CCF6C16}
Frage: ist das unter FB korrekt, oder sollte ich für den Feldtyp etwas anderes einstellen?
Danke und viele Grüße
Michael
Guid-Felder unter FB
Re: Guid-Felder unter FB
Ich würde mal auf ein Problem mit der Zeichencodierung tippen. Lazarus verwendet standardmäßig UTF8. Wenn in deiner Datenbank eine andere Kodierung verwendet wird, dann kann es zu solchen Anzeigeproblemen kommen. Entweder baust du in dem Fall Konvertierungsroutinen ein oder du änderst die Kodierung in der Datenbank.
knight
knight
-
- Beiträge: 16
- Registriert: Fr 2. Okt 2009, 10:11
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Hessen
Re: Guid-Felder unter FB
... auch mit UTF8 in der DB kommen die Zeichen so heraus, ändert sich leider nichts.knight hat geschrieben:Ich würde mal auf ein Problem mit der Zeichencodierung tippen. Lazarus verwendet standardmäßig UTF8. Wenn in deiner Datenbank eine andere Kodierung verwendet wird, dann kann es zu solchen Anzeigeproblemen kommen. Entweder baust du in dem Fall Konvertierungsroutinen ein oder du änderst die Kodierung in der Datenbank.
knight
Viele Grüße
Michael
-
- Beiträge: 16
- Registriert: Fr 2. Okt 2009, 10:11
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Hessen
Re: Guid-Felder unter FB
soweit ich es verstanden habe, ist es kein Problem eines Zeichensatzes, sondern einfach nur das, was FB halt codiert. Ab 2.5.x gibt es wohl Funktionen (uuid_to_char()), die das Ganze bei Bedarf menschenlesbar machen.knight hat geschrieben:Ich würde mal auf ein Problem mit der Zeichencodierung tippen. Lazarus verwendet standardmäßig UTF8. Wenn in deiner Datenbank eine andere Kodierung verwendet wird, dann kann es zu solchen Anzeigeproblemen kommen. Entweder baust du in dem Fall Konvertierungsroutinen ein oder du änderst die Kodierung in der Datenbank.
knight
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Guid-Felder unter FB
Ein TGUID ist ein schöner packed record, dessen Größe sich auch mit SizeOf(TGUID) (von Hand auf 20 Byte geschätzt) ermitteln lässt. Du könntest diesen record also auch als blob speichern.
Alternative ist SysUtils:
Das gibts mindestens seit v. 2.4. aber wahrscheinlich schon (viel) früher.
Alternative ist SysUtils:
Code: Alles auswählen
function StringToGUID(const S: string): TGUID;
function GUIDToString(const GUID: TGUID): string;
function IsEqualGUID(const guid1, guid2: TGUID): Boolean;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: Guid-Felder unter FB
Naja wie es kodiert ist, kann ich mir denken: da der ausgegebene "String" genau halb solang ist wie eine GUID, würde ich mal sagen, nutzt das Feld einfach statt einem Byte für einen Char, ein halbes Byte für den Char (also 4 Bit). Das macht auch durchaus Sinn, da du mit 4 Bit gerade 16 Zeichen repräsentieren kannst und mehr braucht eine GUID ohnehin nicht. Somit sollte es also auch relativ simpel zu dekodieren gehen.