Тип GUID в базе данных - PullRequest
1 голос
/ 30 марта 2010

GUID не является официальным типом данных в базе данных. В нашем существующем проекте SQL Server тип Uniqueidentifier используется для значения GUID. Теперь мы переходим на базу данных Sybase. Должны ли мы использовать varchar(36) для замены этого Uniqueidentifier типа?

Я все еще смущен GUID. Мне сказали, что GUID имеет длину 16 байт, но длина строки символов составляет 36 символов. Я должен что-то пропустить.

Ответы [ 4 ]

6 голосов
/ 30 марта 2010

GUID на самом деле является целочисленным типом - это 128-битное целое число (16 байт).

Он часто представляется в виде строки из 36 символов, но фактическим значением является 128-битное целое число.

5 голосов
/ 30 марта 2010

Причина в том, что это 36 символов, потому что Guid обычно отображается как:

########-####-####-####-############

# = 1 hex character (0-9, A-F)
32 hex chars and 4 hyphens

Быстрый поиск Google нашел этот сайт Sybase для newid , который может вам помочь.

2 голосов
/ 30 марта 2010

Поскольку целое число составляет 32 бита, а Guid - 128 бит, вы можете преобразовать Guid в четыре 32-битных целых числа (или два 64-битных целых числа). Смотрите здесь: Представляет Guid как набор целых чисел

Но, вероятно, было бы проще сохранить его в базе данных в виде строки (или двоичного файла), если у вас нет собственного типа Guid. К сожалению, у вас не будет возможности генерировать их на стороне базы данных, как в SQL Server, поэтому его использование в качестве первичного ключа будет ограничено.

2 голосов
/ 30 марта 2010

Существует тип uniqueidentifier.
varchar(36) должно быть эквивалентно в других базах данных.

Чтобы преобразовать значение uniqueidentifier в тип данных char:

DECLARE @myid uniqueidentifier
SET @myid = NEWID()
SELECT CONVERT(char(255), @myid) AS 'char'
GO

уникальный идентификатор (Transact-SQL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...