2012-02-29 5 views
2

MySQL (커넥터/NET) 용 ADO.NET 드라이버를 사용하는 C# .NET 3.5 응용 프로그램이 있습니다. Guid.NewGuid()을 MySQL 데이터베이스에 BINARY(16)으로 저장합니다.PHP에서 이진 guid 인코딩 및 디코딩

PHP 5.3.4를 사용하는 다른 응용 프로그램에서는 이진 값을 GUID 문자열로 읽고 GUID 문자열을 동일한 16 바이트 이진 값으로 인코딩 할 수 있어야합니다.

GUID string: E241346C-504F-4BE5-BDF3-1B8274815597 
BINARY(16): 65 32 34 31 33 34 36 63 2d 35 30 34 66 2d 34 62 

이 어떻게 PHP에서이 작업을 수행 할 수 있습니다 : 나는이 두 가지 사이의 변환을 할 수 있도록하려면 예를 들어

?

+0

[unpack] (http://www.php.net/manual/pl/function.unpack.php) 함수 – Kuba

+0

[PHP에서 문자열 배열] (http : // stackoverflow. com/questions/885597/string-to-byte-array-in-php) - 거기에 karim79 제안을 확인하십시오. –

+0

언팩은 문자열의 guid를 2 진 표현으로 표시하지만 guid 문자열과 동일하지는 않습니다. – PaulH

답변

0

문제는 필드가 BINARY (16) 였지만 My SQL 커넥터가 CHAR (36)을 거기에 저장하려고 시도했기 때문입니다. (그들은 GUID가 v6.1.1에서 포맷 된 방식을 변경했습니다.) 그래서, 내 GUID의 마지막 20 바이트가 자동으로 잘려졌습니다. (왜 커넥터가 예외를 throw하지 않았는지 알 수 없습니다.) 일단 CHAR (36)로 GUID를 저장하도록 데이터베이스를 변경하면 정상적으로 작동합니다. 또는 연결 문자열에 oldguids=true 요소를 사용할 수 있습니다.