UUID 최대 문자 길이


115

오라클 DB에 대한 기본 키로 UUID를 사용하고 있으며 VARCHAR에 대한 적절한 최대 문자 길이를 결정하려고합니다. 분명히 이것은 36 자이지만 이보다 긴 UUID (최대 60 자)가 생성 된 것을 발견했습니다. 누구든지 UUID에 적합한 최대 문자 길이를 알고 있습니까 ??


2
UUID가 128 비트 숫자이기 때문에 어떤 코딩으로 60 자 문자열로 변환되는지 정말 궁금합니다. 매우 열악한 인코딩 또는 다른 실현되지 않은 문제처럼 보입니다.
fvu

1
RDBMS는 무엇입니까? MS SQL에는 UUID 전용 유형이 있으며 다른 유형은 단순히 바이트를 저장할 수 있습니다. 이것들을 VARCHARs 로 저장하고 싶은 이유가 있습니까?

바이트 수동 검사의 모든 종류의 끔찍한만큼 @ user565869 그들을 저장
Enerccio

답변:


171

RFC4122의 섹션 3은 UUID 문자열 표현의 공식적인 정의를 제공합니다. 36 자 (16 진수 32 자리 + 대시 4 개)입니다.

유효하지 않은 60 자 ID가 어디에서 오는지 알아 내고 1) 수락할지 여부 및 2) 해당 ID의 최대 길이를 생성하는 데 사용되는 API에 따라 결정해야하는 것처럼 들립니다.


64

이것은 각 값이 정확히 동일한 길이를 갖기 때문에 VARCHAR 36이 아니라 CHAR 36으로 정의하기에 완벽한 종류의 필드입니다. 그리고 각 값에 대한 데이터 길이를 저장할 필요가없고 값만 저장할 필요가 있기 때문에 저장 공간을 덜 사용하게됩니다.


9
열의 문자 집합이 멀티 바이트 인 경우 CHAR는 VARCHAR보다 더 많은 공간을 사용할 수 있습니다 ( stackoverflow.com/a/59686/1691446의 하단 부분 참조 )
David

7
UUIDv4는 UTF-8의 latin-1 문자 집합 만 사용하고 있으며이 경우 영향을받지 않습니다. 그래도 다른 문자 집합을 사용하고 있는지 확실히 확인하십시오.
Aaron_H

2
문자열 형식의 UUID는 [0-9A-Fa-f-]ASCII의 23 개의 개별 8 진수 인이 문자 집합 (정규식) 만 사용할 수 있습니다 .
cowbert

RFC 4122는 UUID가 16 옥텟 또는 128 비트라고 말합니다. 그보다 많은 스토리지를 사용하고 있다면 비효율적으로 인코딩하는 것입니다. 예를 들어 대시를 인코딩 할 필요가 없습니다. 그들은 정보를 추가하지 않습니다.
Trenton

4
@Trenton에는 스토리지 효율성과 사용자 친 화성간에 절충안이 있습니다. 최대 스토리지 효율성을 위해 UUID를 BINARY (16)로 저장할 수 있지만 DB를 살펴 보는 사람은 표준 표현을 볼 수 없으며 프로그래밍 언어는 표준 / 문자열 표현에서 UUID 객체를 생성하는 수단 만 가질 수 있습니다. UUID 객체 유형이 전혀 없습니다. UUID를가 등을 바이너리 형태의 성가와 비교하고, 파일에 문자열 형태로 저장 될 수있다
TaylanUB

7

요즘 대부분의 데이터베이스에는 작업을 더 쉽게하기 위해 기본 UUID 유형이 있습니다. 그렇지 않은 경우 128 비트 숫자이므로 BINARY (16)를 사용할 수 있으며 텍스트 형식이 자주 필요한 경우 (예 : 문제 해결) 계산 된 열을 추가하여 이진 열에서 자동으로 생성합니다. . (훨씬 더 큰) 텍스트 양식을 저장할 이유가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.