암묵적 형변환

minstone·2022년 8월 24일
0
post-thumbnail

MySQL은 문자형을 숫자와 비교할때 암묵적으로 형변환을 한다.


💻 테스트 테이블/테스트 데이터

mysql> DESC TB_CHANGE_OLDER_BROTHER;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| C_VARCHAR | varchar(100) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> SELECT * FROM TB_CHANGE_OLDER_BROTHER;
+------------+
| C_VARCHAR  |
+------------+
| 940630TEST |
| 940701TEST |
| 940702TEST |
| 940703TEST |
| 940704TEST |
| 940705TEST |
| TEST940630 |
| TEST940701 |
| TEST940702 |
| TEST940703 |
| TEST940704 |
| TEST940705 |
+------------+
12 rows in set (0.00 sec)

해당 기능(?)의 경우 형변환대상에 따라 0으로처리하기도, 안하기도 하는데 예시는 아래와 같다.


💻 VARCHAR타입컬럼 숫자 0 조건으로 조회

mysql> DESC TB_CHANGE_OLDER_BROTHER;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| C_VARCHAR | varchar(100) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> SELECT * FROM TB_CHANGE_OLDER_BROTHER where C_VARCHAR = 0;
+------------+
| C_VARCHAR  |
+------------+
| 940630TEST |
| 940701TEST |
| 940702TEST |
| 940703TEST |
| 940704TEST |
| 940705TEST |
+------------+
6 rows in set (0.03 sec)

' C_VARCHAR = 0 ' 조건에서 940630TEST, 940701TEST, 940702TEST, 940703TEST, 940704TEST, 940705TEST 와 같이 숫자로 시작하는 숫자+문자 데이터를 0으로 처리했다. 숫자로 시작하는 데이터에 한해서는 0과 같게 취급하고, 문자로 시작하면 온전한 데이터로 조회된다.

따라서 성능도 안나오고, 상황에따라 다르게 조회될 수 있는 암묵적 형변환대신, 형을 맞추어 조회하도록 하자

profile
🌚Stone Kid

0개의 댓글