본문 바로가기
카테고리 없음

[MariaDB] UUID 16진수 문자열 변환 조회 방법

by 쿡노트 2023. 11. 8.
반응형

MariaDB(MySQL)에서 대부분 PK로 AUTO_INCREMENT 값이나 UUID(Universally Unique ID) 값을 사용한다.
MariaDB에서 데이터 조회시 바이너리 형태의 UUID를 16진수 문자열로 읽을 수 있도록 변환해서 조회하는 방법을 기재한다. 

MariaDB에서 UUID 조회


UUID는 다음과 같이 32개의 16진수로 구성이 되며 5개의 그룹을 하이픈(-)으로 구분하여 표기한다.

b1840eb6-7dfb-11ee-8f53-0242ac1d0002

UUID 크기

UUID값을 그대로 DB에 저장하게 되면 불필요한 하이픈(-) 제거하더라도 32 bytes로 계산된다.(저장 시 필요한 데이터 타입 CHAR(32))
PK값을 INT (4 bytes) 또는 BIGINT(8 bytes)로 하는 것보다 몇 배나 저장공간을 차지하게 된다.
이를 개선하기 위해 CHAR(32)가 아닌 UUID를 Binary(16) 형태로 저장하게 되면, 크기를 절반으로 줄일 수 있다.
단, UUID를 Binary 형태로 저장하게 되면, 사람이 읽을 수 있도록 변환하는 과정이 필요하다.

16진수 문자열 -> 바이너리 형태로 변환된 UUID 조회 결과

바이너리 UUID -> 16진수 문자열로 변환(HEX)

변환된 UUID 하이픈(-)이 포함된 소문자(MariaDB에서 조회했던 UUID 형태로 변환) BIN_TO_UUID()


참조로 BIN_TO_UUID 함수와 반대로 문자열에서 바이너리로 변경하는 UUID_TO_BIN 함수는 MySQL 8.0부터 지원한다.

(참조) MariaDB에서 BIN_TO_UUID function 생성문

DELIMITER $$
CREATE FUNCTION BIN_TO_UUID(b BINARY(16))
RETURNS CHAR(36)
BEGIN
   DECLARE hexStr CHAR(32);
   SET hexStr = HEX(b);
   RETURN LOWER(CONCAT(
        SUBSTR(hexStr, 1, 8), '-',
        SUBSTR(hexStr, 9, 4), '-',
        SUBSTR(hexStr, 13, 4), '-',
        SUBSTR(hexStr, 17, 4), '-',
        SUBSTR(hexStr, 21)
    ));
END; 
$$
DELIMITER ;

16진수 문자열 UUID를 바이너리로 변경 (UNHEX 또는 UUID_TO_BIN())

 

결론적으로, 바이너리를 HEX() 또는 BIN_TO_UUID()로 16진수 문자열로 변환 가능하며, 반대로는 UNHEX() UUID_TO_BIN()으로 변환 가능하다.

 

참조 사이트 

https://velog.io/@wndbsgkr/MySQL%EC%97%90%EC%84%A0-UUID%EB%A5%BC-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A3%A0\
https://mysqlcode.com/mysql-uuid_to_bin-and-bin_to_uuid/

 

MySQL에선 UUID를 어떻게 사용하죠?

사용이유 MySQL에서는 PK로 대부분 AUTO_INCREMENT값이나 UUID값으로 설정을 하곤 한다. 개인적으로 PK를 AUTO_INCREMENT로 사용하는 이유는 사용하기 쉽고 알아보기도 쉬워서이다. 하지만 분산 환경에서의

velog.io

 

MySQL UUID_TO_BIN and BIN_TO_UUID Functions - MySQLCode

In this tutorial, we will study two essential MySQL functions, UUID_TO_BIN() and BIN_TO_UUID(). These functions are related to the UUID() function and are

mysqlcode.com

 

감사합니다.

반응형