db/mysql

MySQL 16진수 자료형

C/H 2010. 9. 1. 20:38

16진수 값

MySQL은 16 진수 값을 지원한다. 숫자 문장안에서 16진수 값은 정수처럼 동작을 한다 (64-비트 표현식). 반면에, 스트링 문자에서는 바이너리 스트링처럼 동작을 하며, 각각의 16진수 쌍은 하나의 문자로 변환된다:

 SELECT x'4D7953514C';
-- -> 'MySQL'
SELECT 0xa+0;
-- -> 10
SELECT 
x5061756c;
-- -> 'Paul'

16진수 값의 디폴트 타입은 스트링이다. 이 값을 확실하게 숫자로 처리하고 싶다면, CAST(... AS UNSIGNED)를 사용하도록 한다:

SELECT 0x41, CAST(0x41 AS UNSIGNED);
-- -> 'A', 65 x'hexstring'

구문는 표준 SQL를 기반으로 한다. 0x 신텍스는 ODBC에 기반을 둔다. BLOB 컬럼 값을 지원하기 위해서 ODBC가 16진수 스트링을 사용하는 경우도 종종 있다.

HEX() 함수를 사용하면 스트링 또는 숫자를 16진수 포맷 스트링으로 변환 시킬 수가 있다:

SELECT HEX('cat');
-- -> '636174'
SELECT 0x636174;
-- -> 'cat'

스티링 함수

CONV(N,from_base,to_base)

서로 다른 문자 베이스(base)간의 숫자를 변환한다. from_base 에서 베이스 to_base로 변환된 숫자 N의 스트링 표현식을 리턴한다. 인수 중의 하나가 NULL이면 NULL을 리턴한다.인수 N 은 정수로 해석되지만, 정수 또는 스트링으로 지정될 수도 있다. 최소 베이스는 2 이고 최대 베이스는 36이다. 만일 to_base 가 음수라면, N 은 부호화된 숫자로 간주된다. 그렇지 않을 경우에는, N 은 부호 없는 숫자로 취급된다. CONV()는 64-비트 정밀도를 갖는다.

 SELECT CONV('a',16,2);
-- -> '1010'
 SELECT CONV('6E',18,8);
-- -> '172'
 SELECT CONV(-17,10,-18);
-- -> '-H'
 SELECT CONV(10+'10'+'10'+0xa,10,10);
-- -> '40'
 select conv('aaa', 36, 10), conv(1120-934123984, 10, 36);
-- -> 13330, '3W5E111QOMYZ4'

UNHEX(str)

HEX(str)와는 반대 연산을 실행한다. 즉, 이 함수는 인수에 있는 각각의 16진수를 숫자로 해석을 하고 그 숫자에 대응하는 문자로 변환을 시킨다. 그 결과로 나오는 문자들은 바이너리 스트링으로 리턴된다.

 SELECT 
UNHEX('4D7953514C');
-- -> 'MySQL'
 SELECT 0x4D7953514C;
-- -> 'MySQL'
 SELECT UNHEX(HEX('string'));
-- -> 'string'
 SELECT HEX(UNHEX('1267'));
-- -> '1267' 


반응형