PHP / MySQL - 创建唯一随机字符串的最佳方法?

2022-08-30 16:42:40

如何在MySQL中创建随机唯一字符串?

当我需要在PHP中创建一个随机字符串时,我使用这个函数:

public function generateString($length)
{   
    $charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    for($i=0; $i<$length; $i++) 
        $key .= $charset[(mt_rand(0,(strlen($charset)-1)))]; 

    return $key;
}

然后,我会获取生成的字符串并将其存储在MySQL数据库中。

确保生成的随机字符串对于为数据库中的其他条目创建的所有其他随机字符串是唯一的,的最佳方法是什么?

也许是这样的东西?

while(++$i < 100)
{
  //query db with random key to see if there is a match

  //if no match found break out of loop
  break;

}

这似乎很混乱而且很长,我可能会多次命中数据库。如何快速确定我的新随机字符串是唯一的?


答案 1

为什么不直接使用内置函数来生成唯一标识符呢?您不必担心以这种方式重复。

PHP和MySQL都有自己的。

PHP: uniqid()

MySQL: UUID()


答案 2

假设字符集中有 10 个字符,则表示存在 (26 + 26 + 10)10 = 8.39299366 × 1017 种可能的组合。要计算碰撞的几率...只有上述数字的1/x。所以我不会担心两次得到相同的字符串。即使再次获得相同的字符串,我也只是在循环中再次运行该函数,唯一的退出条件是找到唯一的字符串。a-z, A-Z, 0-9


推荐