반응형
데이터베이스를 다루다 보면 문자열을 숫자로 바꾸거나, 반대로 숫자나 바이트 데이터를 문자열로 바꾸는 작업이 종종 필요하다.
이럴 때 쓰는 함수가 바로 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
반응형
'DB' 카테고리의 다른 글
| [MySQL] 최대/최소/중간값: GREATEST, LEAST, INTERVAL 비교 (1) | 2025.07.21 |
|---|---|
| [MySQL] 숫자 절댓값과 부호 함수: ABS, SIGN 활용법 (1) | 2025.07.21 |
| [MySQL] 숫자 반올림 함수: ROUND, CEIL, FLOOR 완전 정리 (0) | 2025.07.21 |
| [MySQL] 고급 문자열 함수: FIELD, ELT, FIND_IN_SET 정리 (1) | 2025.07.19 |
| [MySQL] 반복, 역순, 공백 함수: REPEAT, REVERSE, SPACE 정리 (1) | 2025.07.19 |
| [MySQL] 대소문자 변환 함수: UPPER, LOWER 실습 가이드 (0) | 2025.07.19 |
| [MySQL] 문자열 공백 제거 함수: TRIM, LTRIM, RTRIM 비교 (0) | 2025.07.19 |
| [MySQL] 문자열 패딩 함수: LPAD, RPAD 예제 중심 정리 (0) | 2025.07.19 |