문제

이것이 UUID ()에 의해 생성 된 MySQL Guid/UUID를 바이너리 (16)로 변환하는 가장 좋은 방법입니다.

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

그리고 이진에 보관하십시오 (16)

내가 알아야 할 이런 식으로 수행하는 의미가 있습니까?

도움이 되었습니까?

해결책

많은 의미는 없습니다. 쿼리가 약간 느려지지만 거의 눈치 채지 못할 것입니다.

UNIQUEIDENTIFIER 저장됩니다 16-byte binary 어쨌든 내부적으로.

이진을 클라이언트에로드하고 거기에 구문 분석하려면 bit order, 초기에 다른 문자열 표현이있을 수 있습니다. NEWID().

Oracle'에스 SYS_GUID() 함수는이 문제가 발생하기 쉬우므로 문자열로 변환하면 클라이언트와 서버에서 다른 결과를 제공합니다.

다른 팁

MySQL 8.0 이상에서 사용할 수 있습니다 uuid_to_bin:

uuid_to_bin (String_uuid), uuid_to_bin (String_uuid, swap_flag)

문자열 UUID를 이진 UUID로 변환하고 결과를 반환합니다. (IS_UUID () 함수 설명은 허용 된 문자열 UUID 형식을 나열합니다.) 반환 바이너리 UUID는 Varbinary (16) 값입니다.

CREATE TABLE t (id binary(16) PRIMARY KEY);

INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));

SELECT *, BIN_TO_UUID(id) FROM t;

DB-Fiddle.com 데모

나는 그것을 8 바이트 정수로 해시하고 murmurhash64a와 같은 저 충돌 고효율 단방향 해시 알고리즘을 사용하여 정수를 보관할 것입니다. 이것은 훨씬 적은 공간을 사용하며 색인 및/또는 분할 할 수 있습니다. MySQL에 대한 Memcached Functions가 포함 된 Sourceforge 프로젝트가 있습니다.http://forge.mysql.com/projects/project.php?id=250) memchached가 그것을 사용하기 때문에 murmurhash64a를 포함 할 수 있지만, 나는 모른다. 또는 MySQL 용 FNV 구현을 살펴보십시오. http://www.xaprb.com/blog/2008/03/09/a- havery-fast-fnv-hash-function-for-mysql/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top