【发布时间】:2017-03-07 21:38:05
【问题描述】:
标准的 UUID 很长,你不能通过双击来选择整个东西。
例如123e4567-e89b-12d3-a456-426655440000
我喜欢较短的 ID。
我喜欢能够双击一个 ID 来选择它。
我的问题是:将标准 ID 编码为 22(ish) 字符长的 base62 字母数字字符串是否有任何问题?
例如71jbvv7LfRKYp19gtRLtkn
编辑:添加上下文
我们的需求是 DynamoDB 等 NoSQL 数据存储服务中的通用数据存储。碰撞不应该发生,但我的理解是与 UUID 的碰撞风险可以忽略不计。标准 UUID 可以满足我们的需求,所以我要问的是……标准 UUID 不存在的 base62 编码是否存在任何差异,或者额外的风险或不可预见的问题? p>
谢谢。
【问题讨论】:
-
取决于它们的用途、存储位置以及是否关心碰撞。更多上下文?
-
我在上面添加了上下文。
-
请记住,UUID 是 128 位值,不是字符串。我们使用字符串向人类显示 UUID。规范的文本表示是hexadecimal,其中散布有四个连字符,32 + 4 = 36。但是您可以生成任何您希望的文本表示,只要发送者和接收者都理解它并且可以获得 128 位。正如 dabest1 所提到的,您可以省略连字符,因为它们只会使十六进制更易于人类阅读,并且更易于识别为 UUID。
-
另请注意,某些数据库(例如Postgres)原生支持 UUID 作为数据类型,有效地仅存储底层值的 128 位而不是字符串。
-
谢谢 basil,这是我正在寻找的信息 :)