Open jurlring opened 2 years ago
문자열 타입과 숫자 타입 작성시 MySQL에서의 우선 순위
그냥 훌훌 읽다가 생각치도 못한 부분을 발견해서 선정하였다. 타입 확인시 다르면 바로 exception이 나는 줄 알았는데 아니였다니...!
MySQL은 숫자 타입과 문자열 타입 간의 비교에서 숫자 타입을 우선시하므로 문자열 값을 숫자 값으로 변환한 후 비교한다.
SELECT * FROM test WHERE number_column = '10001';
위의 쿼리문은 숫자로 변환 후 비교한다.
SELECT * FROM test WHERE string_column = 10001;
하지만 문자열 컬럼에 숫자가 들어온 경우, MySQL은 문자열 컬럼을 숫자로 변환해서 비교한다.
즉, string_column의 모든 문자열 값을 숫자로 변환해서 비교를 수행해야하므로 인덱스가 있더라고 이를 이용한 비교가 아닌 값을 다 꺼내서 비교하게 된다.
string_column에 알파벳 같이 숫자가 아닌 문자가 있을 경우는 숫자로 변환할 수 없어, 쿼리 자체가 실패할 수 있다.
기억이 안남요..
주제
문자열 타입과 숫자 타입 작성시 MySQL에서의 우선 순위
선정 이유
그냥 훌훌 읽다가 생각치도 못한 부분을 발견해서 선정하였다. 타입 확인시 다르면 바로 exception이 나는 줄 알았는데 아니였다니...!
해당 텍스트
MySQL은 숫자 타입과 문자열 타입 간의 비교에서 숫자 타입을 우선시하므로 문자열 값을 숫자 값으로 변환한 후 비교한다.
위의 쿼리문은 숫자로 변환 후 비교한다.
하지만 문자열 컬럼에 숫자가 들어온 경우, MySQL은 문자열 컬럼을 숫자로 변환해서 비교한다.
즉, string_column의 모든 문자열 값을 숫자로 변환해서 비교를 수행해야하므로 인덱스가 있더라고 이를 이용한 비교가 아닌 값을 다 꺼내서 비교하게 된다.
string_column에 알파벳 같이 숫자가 아닌 문자가 있을 경우는 숫자로 변환할 수 없어, 쿼리 자체가 실패할 수 있다.
관련 페이지
기억이 안남요..