MySQL에서 IFNULL(표현식1, 표현식2) 함수의 기본 반환 타입은 두 표현식 중 더 일반적인(general) 타입으로 결정됩니다. 이때 타입의 우선순위는 STRING → REAL → INTEGER 순서를 따릅니다.
쉽게 말해, 인수로 전달된 값 중 하나라도 문자열이 있다면 결과는 문자열 타입이 되고, 실수와 정수가 함께 사용되면 실수 타입이 되는 방식입니다. 아래 예시를 통해 구체적으로 확인해 보겠습니다.
예시: IFNULL() 반환 타입 확인하기
mysql> Create table testing Select IFNULL(100,'testing123'); Query OK, 1 row affected (0.18 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> Select * from testing568; +-----------------------+ | IFNULL(100,'testing') | +-----------------------+ | 100 | +-----------------------+ 1 row in set (0.00 sec) mysql> Describe testing568; +-----------------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+------------+------+-----+---------+-------+ | IFNULL(100,'testing') | varchar(7) | NO | | | | +-----------------------+------------+------+-----+---------+-------+ 1 row in set (0.03 sec)
결과 분석
위 결과 집합에서 확인할 수 있듯이, 이 경우 생성된 컬럼의 타입은 varchar(7), 즉 문자열(String) 타입입니다.
정수 100과 문자열 'testing'이 함께 IFNULL() 함수에 전달되었을 때, MySQL은 우선순위가 더 높은 일반적인 타입인 문자열을 반환 타입으로 선택한 것입니다. 만약 두 인수가 모두 정수였다면 반환 타입은 INTEGER가 되었을 것입니다.
정리
- IFNULL()의 반환 타입은 두 인수 중 더 일반적인 타입으로 결정됩니다.
- 타입 우선순위는 STRING > REAL > INTEGER 순입니다.
- 문자열과 정수가 섞여 있으면 결과 컬럼은 varchar와 같은 문자열 타입이 됩니다.