SQL 타입 변환 CAST, CONVERT, BINARY 사용법과 예제
SQL에서는 데이터 타입이 서로 다른 값들을 비교하거나 연산할 때, 자동 또는 명시적으로 타입 변환(Type Casting)을 수행합니다. 특히 MySQL에서는 CAST(), CONVERT(), BINARY와 같은 연산자를 통해 정확하고 의도된 타입 변환이 가능합니다. 이 글에서는 MySQL의 타입 변환 연산자 및 함수의 기능과 실전 활용법을 정리했습니다.
1. MySQL 타입 변환 함수 개요
| 연산자/함수 | 기능 | 특징 |
|---|---|---|
BINARY |
문자열을 바이너리 문자열로 변환 | 대소문자 구분 비교에 사용 |
CAST() |
값을 지정된 데이터 타입으로 명시적 변환 | 표준 SQL 문법 |
CONVERT() |
값의 타입 또는 문자셋을 변환 | 문자셋 변환은 CONVERT만 지원 |
2. BINARY 연산자: 대소문자 구분 비교
문법
BINARY expr
예제
SELECT BINARY 'a' = 'A' AS BinaryCompare, 'a' = 'A' AS NonBinaryCompare;
| BinaryCompare | NonBinaryCompare |
|---|---|
| 0 | 1 |
✅ BINARY를 사용하면 대소문자 구분이 적용되어 ‘a’ != ‘A’가 됩니다.
3. CAST() 함수: 명시적 타입 변환
문법
CAST(expr AS type)
지원 타입 예시
SIGNED,UNSIGNEDCHAR,BINARYDATE,DATETIME,TIMEDECIMAL(M,D),JSON(MySQL 5.7.8 이상)
예제
1. 숫자 변환
SELECT 4 / '2' AS ImplicitCast, 4 / CAST('2' AS UNSIGNED) AS ExplicitCast;
| ImplicitCast | ExplicitCast |
|---|---|
| 2 | 2.0000 |
2. 날짜 변환
SELECT CAST('2025-12-15' AS DATE) AS ConvertedDate;
✅ 명시적 변환은 데이터 비교 및 연산의 정확성을 높입니다.
4. CONVERT() 함수: 타입 또는 문자셋 변환
문법
-- 타입 변환
CONVERT(expr, type)
-- 문자셋 변환
CONVERT(expr USING charset_name)
예제
1. 숫자 변환
SELECT CONVERT('123.45', DECIMAL(10,2)) AS DecimalValue;
2. 문자셋 변환
SELECT CONVERT('안녕하세요' USING utf8mb4) AS UTF8Text;
✅ CAST()는 문자셋 변환 불가, 문자셋 변환은 반드시 CONVERT() … USING 사용
5. 실전 예제 모음
5.1. 숫자 변환 및 연산
SELECT
CAST('100' AS UNSIGNED) + 50 AS SumValue,
CONVERT('200.25', DECIMAL(10,2)) - 50.25 AS DifferenceValue;
5.2. 날짜 비교를 위한 변환
SELECT
OrderDate,
CAST(OrderDate AS CHAR) AS DateAsString
FROM Orders
WHERE CAST(OrderDate AS DATE) > '2025-01-01';
5.3. 문자셋 변환
SELECT
CONVERT(Name USING utf8mb4) AS UTF8Name
FROM Customers;
6. CAST() vs CONVERT() 차이
| 항목 | CAST() | CONVERT() |
|---|---|---|
| 표준 여부 | SQL 표준 함수 | MySQL 고유 함수 |
| 타입 변환 | 지원 | 동일하게 지원 |
| 문자셋 변환 | 미지원 | USING 구문으로 지원 |
✅ 타입 변환은 둘 다 가능, 문자셋 변환은 CONVERT만 가능
7. 묵시적 변환 vs 명시적 변환
| 항목 | 설명 |
|---|---|
| 묵시적 변환 | MySQL이 자동으로 타입을 변환 |
| 명시적 변환 | CAST() 또는 CONVERT()를 사용한 변환 |
| 추천 사용 | 데이터 오류 방지를 위해 명시적 변환 권장 |
-- 묵시적 변환
SELECT 10 + '20'; -- 결과: 30
-- 명시적 변환
SELECT 10 + CAST('20' AS UNSIGNED); -- 결과: 30
8. 요약 정리표
| 연산자/함수 | 기능 | 대표 예제 |
|---|---|---|
BINARY |
문자열을 바이너리로 변환 | BINARY 'a' = 'A' → 0 |
CAST() |
명시적 타입 변환 | CAST('123' AS UNSIGNED) |
CONVERT() |
타입 또는 문자셋 변환 | CONVERT('안녕' USING utf8mb4) |
질문 정리
-
CAST와 CONVERT는 언제 사용하나요?
- 타입 변환만 필요하면 둘 다 가능, 문자셋 변환은 CONVERT만 사용하세요.
-
묵시적 타입 변환은 안전한가요?
- 일부 상황에서는 오류나 예기치 않은 결과가 나올 수 있어 명시적 변환이 더 안전합니다.
-
날짜 문자열을 비교하려면 어떻게 하나요?
WHERE CAST(date_field AS DATE) > '2025-01-01' -
‘100’ + 50은 오류가 나지 않나요?
- MySQL은 문자열을 자동으로 숫자로 변환하므로 오류 없이 처리됩니다.
-
CONVERT는 다른 DBMS에서도 쓸 수 있나요?
- 대부분의 DBMS에서는
CAST()는 지원되지만, MySQL의CONVERT()는 전용 기능입니다.
- 대부분의 DBMS에서는
댓글남기기