2010-05-15 76 views
4

我想添加UUIDs到几个表,但我不知道什么是最好的方式来存储/检索这些会是。我知道使用BINARY(16)而不是VARCHAR(36)更有效率。做了一些研究之后,我也发现,你可以转换一个UUID字符串,以二进制文件:PHP/MySQL的:存储和检索UUIDS

UNHEX(REPLACE(UUID(),'-','')) 

请原谅我的无知,但有一个简单的方法来此用PHP然后把它回字符串当需要时,为了可读性?

另外,如果我将此作为主键而不是auto_increment,会有很大的区别吗?

编辑:

找到了部分答案:

$bin = pack("h*", str_replace('-', '', $guid)); 

那你怎么解压?

+1

http://stackoverflow.com/questions/547118/storing-mysql-guid-uuids – zsong 2010-05-15 05:35:53

+1

http://php.net/manual/en/function.unpack.php – Amber 2010-05-15 05:40:31

回答

6

好吧 - 试着回答我自己的问题。这是我能想出的最好:

包:

$binary = pack("h*", str_replace('-', '', $string)); 

拆开

$string = unpack("h*", $binary); 
$string = preg_replace("/([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})/", "$1-$2-$3-$4-$5", $string); 

是否有任何问题,这个任何人都可以看到?

+1

小心,unpack方法返回一个数组: $ arr = unpack(“h *”,$ binUUID); $ string = $ arr ['1']; – 2012-03-02 11:39:08

+3

如果您希望与MySQL(UN)HEX函数兼容,则这是使用包的错误方法。你需要使用pack('H *')(大写字母H) – 2014-08-06 08:56:06