2012-02-21 115 views

回答

9

不,不可能让PHP生成与MySQL完全相同的UUID(),因为它是一个(完全)随机数。

听起来像你的问题是,你喜欢在MySQL中使用UUID(),但不想执行额外的查询来找出新的UUID是什么。

那么为什么不让PHP创建UUID作为INSERT查询中的主键? This comment on php.net应该告诉你如何做到这一点。

使用这些样本功能:

$uuid = UUID::v4(); 
$sql = "INSERT INTO mytable (uuid, foo) VALUES ('{$uuid}', 'bar');"; 
echo "The UUID is: ". $uuid; 

编辑:有页面上几种方法能产生不同类型的UUID秒。 v4是伪随机的,但您可以使用不同的版本或创建自己的UUID生成器。

+0

嗯,使用这种方法,我不得不检查它是否是MySQL中唯一的uuid,以及它是否是跨服务器唯一的。似乎每种方式都需要额外的检查独特或数据拉取? – ina 2012-02-24 03:19:36

+1

如果使用随机生成的UUID,则不会出现此问题。根据统计,如果您在100年内每秒产生** 10亿** UUID ** **,**只有一个**会有50%的机会发生碰撞。 (来源:http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates)尽管你可能永远不会看到冲突,但将UUID作为MySQL主键并定期同步服务器仍然很明智。 – 2012-02-24 14:32:50

0

我试过第一步:$ uuid = UUID :: v4();但它挂起了我的服务器,所以我想到了另一个想法,我试着如下:

从查询获取数据$ sql1 = SELECT UUID()AS uuid; 然后在变量$ UUID存储

,然后使用下面

$ SQL = “INSERT INTO MYTABLE(UUID,FOO)VALUES( '{$ UUID}', '酒吧');”; echo“UUID是:”。 $ UUID;