AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Firebird UUID <> GUID

Ein Thema von Morphie · begonnen am 16. Jan 2013 · letzter Beitrag vom 17. Jan 2013
 
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#5

AW: Firebird UUID <> GUID

  Alt 17. Jan 2013, 13:46
ja, ich habe es mit 2.5.2 ansprobiert.

Du hast das Problem in deinem Beispiel nicht, weil du die 16-Byte UUID bereits mittels CHAR_TO_UUID('9B7C3C32-2B51-49D5-BB9A-7C044B91A061') anlegst...

Das Problem tritt auf, wenn man (z.B. in .NET) eine Variable vom Typ Guid hat. Wenn man sich diesen als 36-Zeichen String ausgeben lässt, bekommt man z.B. diese Darstellung:
Code:
a6ddceee-dc33-46cc-9378-75fbc4d87ef2
Intern speichert Guid aber ein Array von 16 Bytes.
Code:
238,206,221,166,51,220,204,70,147,120,117,251,196,216,126,242
Legt man jetzt einen Datensatz an und will die 16-Byte UUID übergeben, macht man das so:
Code:
INSERT INTO TABLE (ID) VALUES (@PARAMETER1)
im Parameter1 übergibt man dann das 16-Byte-Array. Hier unterscheidet sich dein Beispiel von meinem. Du übergibst die UUID mittels der (ebenfalls fehlerhaften) Funktion CHAR_TO_UUID. Diese beiden Fehler heben sich gegenseitig auf.
Übergibt man die UUID immer über den Befehl CHAR_TO_UUID merkt man den Fehler nicht. Übergibt man ihn dann irgendwann mal als Parameter, hat man das Problem.


In der Datenbank stehen anschließend im Feld ID genau diese 16 Bytes drin. Das kann man sich auch ganz gut mit folgender Abfrage ansehen:
Code:
select
ascii_val(substring(Tabelle.id from 1 for 1)),
ascii_val(substring(Tabelle.id from 2 for 1)),
ascii_val(substring(Tabelle.id from 3 for 1)),
ascii_val(substring(Tabelle.id from 4 for 1)),
ascii_val(substring(Tabelle.id from 5 for 1)),
ascii_val(substring(Tabelle.id from 6 for 1)),
ascii_val(substring(Tabelle.id from 7 for 1)),
ascii_val(substring(Tabelle.id from 8 for 1)),
ascii_val(substring(Tabelle.id from 9 for 1)),
ascii_val(substring(Tabelle.id from 10 for 1)),
ascii_val(substring(Tabelle.id from 11 for 1)),
ascii_val(substring(Tabelle.id from 12 for 1)),
ascii_val(substring(Tabelle.id from 13 for 1)),
ascii_val(substring(Tabelle.id from 14 for 1)),
ascii_val(substring(Tabelle.id from 15 for 1)),
ascii_val(substring(Tabelle.id from 16 for 1))
from Tabelle
Konvertiert man diese Bytes anschließend wieder mittels UUID_TO_CHAR zurück, bekommt man einen vom original-.NET.GUID-String abweichenden String:
Code:
EECEDDA6-33DC-CC46-9378-75FBC4D87EF2

Geändert von Morphie (17. Jan 2013 um 14:00 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz