【发布时间】:2016-04-25 13:21:55
【问题描述】:
我想用一些序列号填充我的 SQL Server 表以提供给其他人。它们只是有效的 UUID,与人们的电子邮件地址相关。
我可以看到 ColdFusion 提供了CreateUUID 函数,但它生成的 ID 格式为:
xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxx
遵循 8-4-4-16 结构。我只想要一些简单的东西,比如 3-3-3 格式,它对于表中的每一行(即每个客户)都是唯一的。
解决这个问题的最佳方法是什么?我不介意在 SQL 或 ColdFusion 中这样做,但我不确定如何让它们中的任何一个为我自动生成这样的字符串。 SQL Server 具有NEWID() 函数,但它再次生成不是我想要的格式的大字符串。
有什么方法可以强制 SQL 的 NewID() 或 CF 的 CreateUUID 创建 3-3-3 格式的唯一序列吗?
【问题讨论】:
-
(编辑)不确定您是指总共九 (9) 位数字还是相同长度的 uuid,只是格式化为三 (3) 组而不是四或五组。如果是后者,我认为您可以生成 uuid 并调整连字符。不过,我不是 100% 确定的。否则,现有格式是否存在特定问题或问题?虽然您当然可以 DIY,但它需要确保生成的值确实是唯一的——而不仅仅是随机的。这似乎有点像重新发明轮子......
-
它们将用作优惠券代码,因此它们不能太长。像“XSY-20B-P7O”这样的东西比巨大的默认 UUID 更能满足我的需求。
-
除非您生成数百万个 ID,否则即使是截断的 UUID 也不太可能发生冲突。原因是在第一组中如何考虑时间戳/时钟。只需去掉
-并使用前 9 个字符。 -
如果值不需要是全局唯一的,并且九个字符包含足够的组合,那可能会起作用。只是不要依赖它是不可能的。如果非唯一值会破坏代码,请务必在表中添加
unique约束(并重试代码)。
标签: sql-server coldfusion guid uuid