SQL Server中存储Azure Active Directory Object ID应选哪种数据类型
SQL Server存储Azure AD Object ID的正确数据类型选择
直接给结论:优先选用SQL Server原生的UNIQUEIDENTIFIER类型,这是适配该场景的最优方案。
选型依据:
- Azure AD生成的Object ID本质是符合RFC 4122规范的128位GUID(全局唯一标识符),和
UNIQUEIDENTIFIER类型的存储结构完全匹配,单值仅占16字节存储空间,远低于字符串类型的存储开销。 - 该类型可以直接接收Microsoft Graph API、Azure AD SDK返回的Object ID值,不需要额外做格式转换;基于该字段建索引、做表关联的查询效率远高于字符串存储方案,也不会出现字符串存储常见的大小写不匹配、多余空格、非法格式值混入的问题。
- 业务需要输出标准字符串格式(带连字符的
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx格式)时,直接通过内置函数转换即可,不需要额外做字符串拼接处理。
不推荐的选型避坑
- 不要使用
VARCHAR(36)/NVARCHAR(36)存储:这类变长字符串类型单值需要占用36~72字节存储空间,索引碎片化更严重,数据校验能力弱,很容易存入不符合格式规范的脏数据。 - 不要使用
CHAR(36)/NCHAR(36)存储:固定长度字符串虽然索引效率略好于变长字符串,但存储空间浪费问题依然存在,同样没有原生GUID类型的格式校验能力。
建表示例
CREATE TABLE dbo.AzureADAccount ( RowId INT IDENTITY(1,1) PRIMARY KEY, AADObjectId UNIQUEIDENTIFIER NOT NULL, DisplayName NVARCHAR(256) NOT NULL, AccountType NVARCHAR(50) NOT NULL, -- 其他业务字段 CONSTRAINT UK_AzureADAccount_ObjectId UNIQUE(AADObjectId) );
查询时如果需要返回字符串格式的Object ID,可以用如下写法:
SELECT CONVERT(CHAR(36), AADObjectId) AS AADObjectIdString, DisplayName FROM dbo.AzureADAccount
内容的提问来源于stack exchange,提问作者user10128627
相关产品推荐
相关产品推荐

