【发布时间】:2011-02-28 10:01:00
【问题描述】:
是否可以在一个应用程序中创建相同的 guid
Guid id = Guid.NewGuid();
【问题讨论】:
是否可以在一个应用程序中创建相同的 guid
Guid id = Guid.NewGuid();
【问题讨论】:
从技术上讲,是的。例如,创建的 Guid 如下所示:
26de36b7-76f5-4f17-8f9d-44eb429f151b
这意味着 32 个字符可以是字母(26 种可能性)或数字(10 种可能性)
这意味着每个位置有 36 个可能性,总共 36^32,大约是。 60 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000。
这意味着,如果您每毫秒创建 2 000 000 000 000 000 000 000 000 000 000 000 000 000 个 Guid(这是不可能的),您平均会一次创建两次相同的 guid,而所有其他 guid将是独一无二的。
所以在实践中。没有;)
【讨论】:
如果您问Guid.NewGuid() 创建重复 guid 的风险是否很高,那么答案是否定的。这取自Wikipedia:
GUID 的值表示为 32 个字符的十六进制字符串,例如 {21EC2020-3AEA-1069-A2DD-08002B30309D},通常存储为 128 位整数。唯一键的总数为 2128 或 3.4×1038——大约每立方毫米地球体积有 2 万亿个。这个数字太大了,同一个数字被生成两次的概率极小。
如果您问我们如何创建两个重复的 guid,那么答案就是:
Guid g1 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D");
Guid g2 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D");
【讨论】:
【讨论】:
Guid.NewGuid() 将始终在全球范围内创建一个唯一的 Guid,而不仅仅是在单个应用程序中。
【讨论】:
GUID 中的 U 代表唯一。 ;-) 所以这应该是不可能的。
【讨论】:
我实际上刚刚发生过这种情况。我有一个包含 7 个项目的数据库表。在我的程序中,我添加了一个新实例,使用 Guid.NewGuid() 作为其 ID。我收到了DbUpdateException,告诉我 ID 与现有 ID 相同。再试一次,效果很好。
【讨论】: