2010-05-15 71 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