代码之家  ›  专栏  ›  技术社区  ›  Yada

实现字母数字ID的最佳方法

  •  1
  • Yada  · 技术社区  · 15 年前

    我注意到短URL站点使用的是字母数字ID而不是整数作为unqiue ID。

    有人有实施经验吗?在MySQL中实现这个特性的最佳方法是什么?我相信棘手的部分可能是身份证的递增和索引。

    例子: bit.ly/AbC123

    4 回复  |  直到 15 年前
        1
  •  4
  •   ggiroux    15 年前

    我怀疑这些字母数字ID中的大多数只是一个转换为以36为基数的数字ID-请参阅此示例 stored function 或者您可以使用UDF来完成。

        2
  •  3
  •   David Pfeffer    15 年前

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

    一般来说,整数是一个更好的唯一ID,因为它们占用更少的内存,而且更容易索引。

        3
  •  1
  •   Community CDub    7 年前

    我将单独生成散列,但为主键维护一个整数(或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转换器实现。

        4
  •  1
  •   codeholic    15 年前

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

    服务器端编程语言也有多种方法,例如 uniqid 在PHP或 Data::UUID 在Perl。