Я хочу , чтобы создать столбец VARCHAR в SQL , который должен содержать , N'guid'
а guid
это сгенерированный GUID с помощью .NET ( Guid.NewGuid ) - класс System.Guid.
Какую длину varchar
я должен ожидать от GUID? Это статическая длина?
Должен ли я использовать nvarchar
(будет ли GUID когда-либо использовать символы Юникода)?
varchar(Guid.Length)
PS. Я не хочу использовать тип данных guid строки SQL. Я просто спрашиваю, что есть Guid.MaxLength
.
Guid.NewGuid
не имеет неявной «длины строки»; Все зависит от формата, используемого в ToString (без аргументовToString
используется форматирование "D"). Я предпочитаю «B», поскольку легче «увидеть, что это GUID», но это просто знакомство и условность.Ответы:
Это зависит от того, как вы форматируете Guid:
Guid.NewGuid().ToString()
=> 36 символов (с переносами)вывод:
12345678-1234-1234-1234-123456789abc
Guid.NewGuid().ToString("D")
=> 36 символов (с переносами, такие же какToString()
)выводятся:
12345678-1234-1234-1234-123456789abc
Guid.NewGuid().ToString("N")
=> 32 символа (только цифры)вывод:
12345678123412341234123456789abc
Guid.NewGuid().ToString("B")
=> 38 символов (фигурные скобки)выводятся:
{12345678-1234-1234-1234-123456789abc}
Guid.NewGuid().ToString("P")
=> 38 символов (круглые скобки)выводятся:
(12345678-1234-1234-1234-123456789abc)
Guid.NewGuid().ToString("X")
=> 68 символов (шестнадцатеричные)выходные данные:
{0x12345678,0x1234,0x1234,{0x12,0x34,0x12,0x34,0x56,0x78,0x9a,0xbc}}
источник
byte[16]
.36, и GUID будет использовать только 0-9A-F (шестнадцатеричный!).
12345678-1234-1234-1234-123456789012
Это 36 символов в любом GUID - они имеют постоянную длину. Вы можете прочитать немного больше о тонкостях GUID здесь .
Вам понадобится еще два, если вы хотите хранить скобки.
Примечание: 36 - длина строки с тире между ними. На самом деле это 16-байтовые числа.
источник
Правильно , что нужно сделать здесь , чтобы сохранить его как
uniqueidentifier
- это то полностью индексируемой и т.д. в базе данных. Следующим лучшим вариантом будетbinary(16)
столбец: стандартные GUID имеют длину 16 байтов.Если вы должны сохранить его как строку, длина действительно сводится к тому, как вы решите ее кодировать. В шестнадцатеричном (кодировка AKA base-16) без дефисов это будет 32 символа (две шестнадцатеричные цифры на байт)
char(32)
.Тем не менее, вы можете хотеть сохранить дефисы. Если у вас мало места, но ваша база данных изначально не поддерживает blob / guids, вы можете использовать кодировку Base64 и удалить
==
суффикс заполнения; это дает вам 22 символа, так чтоchar(22)
. Нет необходимости использовать Unicode и переменную длину - такnvarchar(max)
будет, например, плохим выбором.источник
uniqueidentifer
полностью индексируется, аbinary(16)
нет?Я считаю, что GUID ограничены 16-байтовой длиной (или 32 байта для шестнадцатеричного эквивалента ASCII).
источник
GUID 128 бит, или
Так что да, минимум 20 символов длиной, что на самом деле тратит больше, чем 4,25 бита, так что вы можете быть столь же эффективными, используя меньшие основания, чем 95; базовая 85 - наименьшая возможная, которая все еще вписывается в 20 символов:
:-)
источник
22 байта, если вы делаете это так:
источник
Двоичные строки хранят необработанные байтовые данные, в то время как строки символов хранят текст. Использование двоичных данных при сохранении значений Хэси-десятичные , такие как
SID
,GUID
и так далее. Тип данных uniqueidentifier содержит глобальный уникальный идентификатор или GUID. Это значение получается с помощью функции NEWID (), которая возвращает значение, уникальное для всех объектов. Он сохраняется в виде двоичного значения, но отображается в виде строки символов.Вот пример.
Относится к: SQL Server В следующем примере создается таблица cust с типом данных uniqueidentifier и используется NEWID для заполнения таблицы значением по умолчанию. При назначении значения по умолчанию NEWID () каждая новая и существующая строка имеет уникальное значение для столбца CustomerID.
источник