GUID SQL Server для VarChar (36) или Char (36)? - PullRequest
1 голос
/ 17 апреля 2011

Я заменяю некоторые типы столбцов GUID, так как мне нужно выполнить некоторую Group By работу в MSSQL 2008. Я собирался изменить типы на Char (36), так как я знаю точный размер значения, но после поиска в Googleнемного я вижу, что многие люди делают Varchar (36) вместо этого.Не лучше ли использовать CHAR в этом случае?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2011

Разница между CHAR и VARCHAR заключается в том, как распределено пространство.Поля CHAR всегда имеют определенный размер, но до тех пор, пока поле VARCHAR фактически не содержит данных, оно будет занимать 0 байт.

В вашем случае, хотя, поскольку вы всегда будете хранить 36 символов, япредложил бы вам продолжать использовать CHAR.Если вы хранили данные различной длины, используйте VARCHAR.

Однако действительно ли вы пытаетесь использовать GROUP BY для GUID?Они называются «Глобальный уникальный идентификатор» по причине.Или вы разделяете их и группируете по определенным разделам GUID (которые могут быть одинаковыми, но в целом, как правило, ни один не совпадает).

0 голосов
/ 28 октября 2011

Быстрый ответ: используйте CHAR (36) или, что еще лучше, BINARY (16).

Длинный ответ: Вероятно, было бы лучше оставить типы столбцов без изменений и использовать CAST в своих запросах.

DECLARE @a TABLE (x UNIQUEIDENTIFIER, y INT)
-- Insert some data here
SELECT
    MIN(y),
    CAST(a.x AS BINARY(16))
FROM
    @a AS a
GROUP BY
    CAST(a.x AS BINARY(16))
...