2010-05-15 2 views
4

Я пытаюсь добавить UUID в пару таблиц, но я не уверен, что лучший способ их сохранить или получить. Я понимаю, что гораздо эффективнее использовать BINARY (16) вместо VARCHAR (36). После этого немного исследований, я обнаружил, что вы можете преобразовать UUID строку в бинарный код:PHP/MySQL: Хранение и получение UUIDS

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

помилованию мое невежество, но есть простой способ это с PHP, а затем превратить его обратно в строку , когда это необходимо, для удобства чтения?

Кроме того, будет ли это иметь значение, если я использовал это как первичный ключ вместо auto_increment?

EDIT:

Найдено часть ответа:

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

Как бы вы распаковываете его?

+1

http://stackoverflow.com/questions/547118/storing-mysql-guid-uuids – zsong

+1

http://php.net/manual/en/function.unpack.php – Amber

ответ

6

ОК - попытаемся ответить на мой собственный вопрос. Это лучшее, что я мог придумать:

обновления:

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

Unpack

$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

Позаботьтесь, метод распаковки возвращает массив : $ arr = unpack ("h *", $ binUUID); $ string = $ arr ['1']; –

+3

Это неправильный способ использования пакета, если вы хотите быть совместимым с функциями HEX MySQL (UN). Вам нужно использовать пакет («H *») (верхний регистр H) –

Смежные вопросы