DB

[MySQL] 문자열 인코딩과 포맷 함수: CHAR, ASCII, HEX 등 총정리

인생아 2025. 7. 19. 19:00
반응형

데이터베이스를 다루다 보면 문자열을 숫자로 바꾸거나, 반대로 숫자나 바이트 데이터를 문자열로 바꾸는 작업이 종종 필요하다.
이럴 때 쓰는 함수가 바로 CHAR, ASCII, HEX, UNHEX, BIN, OCT 같은 인코딩 및 포맷 함수들이다.

🔹 CHAR(n [, n2, n3, ...]): 숫자를 문자로 변환

문법

CHAR(N [, N2, N3, ...])

숫자 값을 해당 아스키 코드의 문자로 변환한다.

예제

SELECT CHAR(65);               -- 결과: 'A'
SELECT CHAR(65, 66, 67);       -- 결과: 'ABC'

실무 활용

-- 이모지나 특수문자 조합 생성
SELECT CHAR(128512);           -- 😀
반응형

🔸 ASCII(str): 첫 문자 아스키 코드 반환

문법

ASCII(str)

문자열의 첫 번째 문자의 아스키 코드 값을 반환한다.

예제

SELECT ASCII('A');             -- 결과: 65
SELECT ASCII('ABC');           -- 결과: 65
SELECT ASCII('가');            -- 결과: 다국어일 경우 UTF-8 기준 첫 바이트 코드

실무 활용

-- 숫자인지 문자인지 구분
SELECT ASCII(SUBSTRING(col, 1, 1)) FROM table;

🔸 HEX(str): 16진수로 인코딩

문법

HEX(str or number)

문자열을 16진수 문자열로 반환하거나, 숫자의 16진수 표현을 반환한다.

예제

SELECT HEX('ABC');             -- 결과: 414243
SELECT HEX(255);               -- 결과: FF

실무 활용

-- 바이너리 로그, 인코딩된 컬럼 확인
SELECT HEX(binary_col) FROM table;

🔸 UNHEX(str): 16진수를 다시 문자열로 복호화

문법

UNHEX(16진수문자열)

16진수 문자열을 원래의 문자열(바이트)로 되돌린다.

예제

SELECT UNHEX('414243');        -- 결과: 'ABC'

🔸 BIN(n): 2진수 변환

SELECT BIN(10);                -- 결과: '1010'

🔸 OCT(n): 8진수 변환

SELECT OCT(10);                -- 결과: '12'
반응형

🧠 주요 함수 비교 요약

함수명 기능 예시 입력 결과
CHAR 숫자 → 문자 CHAR(65) 'A'
ASCII 문자 → 아스키코드 ASCII('A') 65
HEX 문자열/숫자 → 16진수 HEX('ABC') '414243'
UNHEX 16진수 → 문자열 UNHEX('414243') 'ABC'
BIN 숫자 → 2진수 BIN(10) '1010'
OCT 숫자 → 8진수 OCT(10) '12'

⚠️ 실무 주의사항

  • ASCII()는 UTF-8 한글의 경우 첫 바이트만 가져오기 때문에 다국어 문자열 처리 시 유의해야 한다.
  • HEX()는 바이너리 데이터 확인 시 유용하지만 사람이 읽기엔 불편할 수 있다.
  • UNHEX()는 짝수 길이의 16진수만 정상 변환되며, 홀수 길이는 오류 또는 비정상 결과가 날 수 있다.
  • CHAR()에 음수나 255 초과 값 입력 시 문자셋과 MySQL 설정에 따라 결과가 다를 수 있다.

💡 실무 활용 팁

1. 로그 데이터 인코딩 확인

SELECT HEX(payload) FROM event_log;

2. QR, 바코드 데이터 디코딩

SELECT UNHEX(hex_col) FROM scan_data;

3. 문자 코드 유효성 검사

SELECT ASCII(SUBSTRING(input_text, 1, 1)) FROM user_inputs;

4. 암호화 키 조합 생성

SELECT CONCAT(HEX(user_id), '-', HEX(NOW()));

🔗 참고 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

 

반응형