본문 바로가기

web

[SQL] MySQL Automatic Type Cast

MySQL의 자동 형 변환에 따른 특성에 대해 설명하겠습니다.


다음과 같은 테이블을 생성하겠습니다. "user" Column은 Char타입이고 "no" Column은 Int타입 입니다.



Records는 다음과 같이 2개를 넣겠습니다.




이제 본격적으로 MySQL의 자동 형 변환에 대해 살펴보겠습니다.


다음과 같이 Char 타입의 Column에 Int 타입의 0을 "="으로 비교하면 모든 Records가 조회됩니다.



이것은 MySQL의 자동 형 변환 때문에 발생합니다. 서로 다른 타입의 데이터를 비교하면 MySQL은 2개의 데이터를 같은 타입으로 변환해서 비교합니다. 위의 Query의 "user=0"에서 user는 INT 0으로 변환되고 결국 0=0이 되어 모든 데이터가 출력되게 됩니다.


좀 더 자세하게 아래의 Query를 보면서 설명하겠습니다.



'a'=0에서 결과가 1이 나왔습니다. 즉 True가 반환되었습니다. 'a' 문자는 INT 0으로 되고 0=0이 되어 True가 되었습니다.

두번째 Query에서는 'a'문자가 INT 0이기 때문에 0=1이 되어, False가 되는 것 입니다.


좀 더 들어가보겠습니다.



첫번째 Query에서 '1a' 문자는 앞에 '1' 문자만 INT 1로 변환되고 뒤에 'a' 문자는 사라지게 됩니다. 그래서 1=1이 되어 True가 출력됩니다. 이와 같은 논리로 두번째 Query는 당연히 False가 출력됩니다. 즉 '123abc'=123은 True 이런식으로 논리가 진행됩니다. 

하지만 'abc123'=123은 False가 되고, 'abc123'=0은 True가 됩니다. 즉 영문자 앞에 있는 숫자만 INT로 변환이되고 영문자 뒤에 숫자는 INT로 변환되지 않습니다.



'web' 카테고리의 다른 글

[SQL] MySQL 대소문자 구분  (1) 2016.02.02
PHP Session 저장 원리  (5) 2016.02.01
[SQL] SELECT Query 특성에 따른 SQL Injection 기법  (2) 2016.01.22