asp.net核心标识-ID列为nvarchar(450)-为什么?

nom*_*mad 5 asp.net-core-identity asp.net-core-2.0

在dbo.AspNetUsersASP.NET Core Identity使用的表中,该Id列的定义如下nvarchar(450)图所示。

因为Guids存储在此列中,这是什么原因?如果我要创建一个引用此Id列的外键,我真的不想使列不必要地变大。还是有一种情况Id需要使用此大小的列?

ASP.NET Core身份用户表

Chr*_*att 4

我不知道为什么它的长度是 450,但这实际上并不重要。NVARCHAR 类型是动态调整大小的,因此它输入的数字实际上是最大长度。无论“长度”如何,它只会消耗存储其所存储的数据所需的字节数。

  • 它可能会影响创建复合 PK。任何使用 AspNetUsers.Id 生成的组合键都会生成“警告!” 聚集索引的最大密钥长度为 900 字节。`消息。我相信他们将其设置为 450 nvarchar 以最大化 PK 大小,从而防止人们创建包含 Id 列的复合 PK。但这只是一个猜测。正如 @ChrisPratt 所说,默认情况下 AspNetUsers.Id 是 GUID,所以你已经有了它。 (7认同)
  • 这实际上很重要!为身份表创建默认迁移将导致 PK 在某些情况下 **CAN** 超过 900 字节最大密钥长度。 (2认同)
  • 他们不会使用“nvarchar(450)”来阻止人们创建涉及用户“Id”的索引,因为他们自己在“AspNetUserRoles.PK_AspNetUserRoles”(1800 字节)中进行操作:“UserID”+“RoleId” (2认同)

归档时间:

查看次数:

804 次

最近记录:

8 年,2 月 前