...
타입 강제 변환
MySQL은 비교나 검색을 수행할 때 데이터의 타입이 서로 다를 경우, 내부적으로 타입이 같아지도록 자동 변환하여 처리합니다.
하지만 사용자가 명시적으로 타입을 변환할 수 있도록 다양한 연산자와 함수도 같이 제공하고 있습니다.
암시적인 형변환
- 문자열이어도 합치면 숫자로 변환
select '100' + '200';
select concat('100','200');
select concat(100,'200');
select 1 > '2mega';
select 3> '2mega';
select 0 = 'mega2';
BINARY
BINARY 연산자는 뒤에 오는 문자열을 바이너리 문자열로 변환합니다.
BINARY 연산자를 이용하면 문자가 아닌 바이트를 기준으로 하여 비교나 검색 작업을 수행할 수 있습니다.
SELECT BINARY 'a' = 'A'; -- false
SELECT 'a' = 'A'; -- true
위의 예제처럼 BINARY 연산자를 이용하면, 비교하려는 문자의 바이트 값을 비교합니다.
따라서 문자 'a'와 'A'가 서로 다른 값으로 인식됩니다.
CAST
CAST() 함수는 인수로 전달받은 값을 명시된 타입으로 변환하여 반환합니다.
이때 변환하고자 하는 타입을 AS 절을 이용하여 직접 명시할 수 있습니다.
CAST(expr AS type)
AS 절에서 사용할 수 있는 타입은 다음과 같습니다.
- BINARY
- CHAR
- DATE
- DATETIME
- TIME
- DECIMAL
- JSON (MySQL 5.7.8부터 제공됨)
- NCHAR
- SIGNED [INTEGER]
- UNSIGNED [INTEGER]
SELECT 4 / '2',
4 / 2,
4 / CAST('2' AS UNSIGNED);
/*
실행 결과
2
2.0000
2.0000
*/
CONVERT
CONVERT() 함수도 CAST() 함수처럼 인수로 전달받은 값을 명시된 타입으로 변환하여 반환합니다.
CONVERT() 함수는 두 번째 인수로 변환하고자 하는 타입을 직접 전달할 수 있습니다.
CONVERT(expr, type) == CAST(expr as type)
CONVERT(expr USING transcoding_name)
USING 절은 서로 다른 문자셋(character set) 간의 데이터 변환을 위해 사용됩니다.
이때 사용할 수 있는 타입은 CAST() 함수와 같습니다.
SELECT CONVERT('abc' USING utf8);
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.