实现字母数字id的最佳方式

时间:2010-02-22 19:29:40

标签: sql mysql

我注意到短网址正在使用alphnumeric id而不是整数id。

有没有人有实施经验?在MySQL中实现此功能的最佳方法是什么?我相信棘手的部分可能是id的增量和索引。

示例:bit.ly/AbC123

4 个答案:

答案 0 :(得分:4)

我怀疑大多数这些字母数字ID只是转换为Base 36的数字ID - 请参阅此示例stored function,或者您可以使用UDF执行此操作。

答案 1 :(得分:3)

老实说,我只是在内部使用一个整数,然后转换为字母数字以向用户公开,如果必须使用字母数字序列。作为示例编码方案,您可以将每个数字用作由A到J(对应于0到9)的字母组成的数组的索引。

整数是一个更好的唯一ID,因为它们占用的内存更少,因为它们更容易编入索引。

答案 2 :(得分:1)

我会单独生成散列,但为主键维护一个整数(或BIGINT)列。 MySQL最适合使用较小的主键,尤其是InnoDB。

例如:

CREATE TABLE `urls` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `hash` char(6) NOT NULL,
  `url` varchar(1000) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_hash` (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

修改:要生成哈希,请参阅this SO post以获取base62转换器的实现。

答案 3 :(得分:1)

如果您不关心ID的长度,请考虑使用UUID()

服务器端编程语言也有各种方法,例如PHP中的uniqid或Perl中的Data::UUID