如何在MySQL中创建随机唯一字符串?
当我需要在PHP中创建一个随机字符串时,我使用此函数:
public function generateString($length)
{
$charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for($i=0; $i<$length; $i++)
$key .= $charset[(mt_rand(0,(strlen($charset)-1)))];
return $key;
}
Run Code Online (Sandbox Code Playgroud)
然后我将获取生成的字符串并将其存储在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;
}
Run Code Online (Sandbox Code Playgroud)
这看起来很乱,很长,我可能会多次打到数据库.如何快速确定我的新随机字符串是否唯一?
假设字符集中的10个字符a-z, A-Z, 0-9
表示存在(26 + 26 + 10)10 = 8.39299366×10 17种可能的组合.计算碰撞的几率......只需1/x上述数字.所以我不会担心两次获得相同的字符串.即使再次获得相同的字符串,我也只是在循环中再次运行该函数,唯一的退出条件是找到一个唯一的字符串.