生成mysql id作为字符串而不是整数

时间:2010-12-01 04:36:57

标签: mysql guid guid-generation

我确信这是一个我不知道名字的东西。

我想生成像:

这样的ID
59AA307E-94C8-47D1-AA50-AAA7500F5B54 

而不是标准的自动递增数字。

它不一定非常类似,但想要一个很长的唯一字符串值。

有一种简单的方法吗?

我想这样做是为了引用附件,因此它们不易使用,例如attachment = 1

我知道有很多方法,但我认为如果可能的话,基于字符串的id会更好,我确定我不是在寻找合适的东西。

谢谢

2 个答案:

答案 0 :(得分:3)

上次检查时,您无法将UUID()指定为MySQL中列的默认约束。这意味着使用触发器:

CREATE TRIGGER
newid
BEFORE INSERT ON your_table_name
FOR EACH ROW
SET NEW.id = UUID()

  

我知道有很多方法,但我认为基于字符串的id会更好

我理解你是在默默无闻之后,但要注意大于4个字符的CHAR / VARCHAR列占用的空间比INT要多(1个字节)。这将影响检索和JOIN中的性能。

答案 1 :(得分:0)

每当需要将它发送到“public”时,您总是可以通过SHA1()或MD5()传递常规auto_increment值。在ID值之前/之后有一个像样的盐渍字符串,几乎不可能猜出原始数字是什么。你不会得到像UUID那样看起来像花哨的字符串,但你仍然有一个常规的整数ID值来处理内部。

如果您担心重复散列列所涉及的额外CPU时间,则可以在创建记录时始终将哈希值存储在单独的字段中。