Соответствует ли UUID возвращаемые функцией SYS_GUID () стандарту RFC4122?
Интересно, возвращает ли функция SYS_GUID() UUID, соответствующий RFC 4122?
Например:
SQL> select sys_guid () from dual;
SYS_GUID()
--------------------------------
A6C1BD5167C366C6E04400144FD25BA0
Знаю, что SYS_GUID() возвращет 16 байт типа данных RAW. В БД используется RAWTOHEX(), и возможно TO_CHAR() для символьного вывода полученых ID.
Правильно ли интерпритировать символьный формат этих значений как совместимый со стндартными UUID:
A6C1BD51-67C3-66C6-E044-00144FD25BA0
Думаю, что нет, не соответствует стандарту RFC 4122 потому, что по определению действительные UUID должны указывать версию внутри себя. Например, для версии 3 соответстввующие RFC 4122 UUID:
xxxxxxxx-xxxx-3xxx-xxxx-xxxxxxxxxxxx
Соответствует ли UUID возвращаемые функцией SYS_GUID() стандарту RFC4122?
Свободный перевод Is Oracle's SYS_GUID() UUID RFC 4122 compliant? от участника @nulldevice
Ответы (1 шт):
Значения, которые возвращает SYS_GUID() эквивалентны UUID, глобально уникальны, но они не соответствуют RFC 4122. В официальной документации это соответствие никак не упомянуто:
SYS_GUIDgenerates and returns a globally unique identifier (RAW value) made up of 16 bytes. On most platforms, the generated identifier consists of a host identifier, a process or thread identifier of the process or thread invoking the function, and a nonrepeating value (sequence of bytes) for that process or thread.
Кроме того, значения идентификаторов хоста и процессов/потоков не оговорены в RFC 4122.
В англ. версии википедии о несоответствии явно говорится:
The Oracle Database SYS_GUID function does not return a standard GUID, despite the name. Instead, it returns a 16-byte 128-bit RAW value based on a host identifier and a process or thread identifier, somewhat similar to a GUID