암시적 유형 변환 주의

자세히 보기
데이터베이스는 SQL이 정상적으로 실행될 수 있도록 항상 우호성을 제공하여 보기에 맞는 SQL의 정상적인 실행을 만족시킨다. 예를 들어 스텔스 형식 전환의 사용은 만자가 코드보다 못하기 때문에 구체적인 문제점을 살펴본다.
먼저 테이블을 만들려면 다음과 같이 하십시오.
create table  CONVERT_SHOW 
(
   USER_ID              bigint(8),
   NAME                  varchar(8),
   OP_TIME              timestamp default CURRENT_TIMESTAMP
);

시뮬레이션 데이터 삽입하기
insert into CONVERT_SHOW(user_id,name)values(0,'cast');

업무 프런트에서 조회표의 데이터를 필요로 할 때 일반적으로 사용하는 조회 SQL:
 
select USER_ID,NAME,OP_TIME from CONVERT_SHOW where USER_ID= ?;

 
일반적으로 이런 매개 변수를 처리하면 '매개 변수 값' 으로 '?' 을 대체합니다.교체된 SQL은 다음과 같습니다.
select USER_ID,NAME,OP_TIME from CONVERT_SHOW where USER_ID= '    ';

이때 숨겨진 함정이 나타날 수 있다. 데이터베이스는 SQL이 정상적으로 작동하기 위해 스텔스 형식 변환을 사용하여 매개 변수를bigint 형식으로 변환한다. 전달된 매개 변수가 정수가 아니면 어떤 상황이 나타날까?
MySQL의 유형 변환을 보려면 다음과 같이 하십시오.
select cast('    ' as UNSIGNED ) ;

결과: 0
만약 시계에 user 가 존재한다면id가 0인 데이터는 되돌아오며, 그 다음은 사람을 초조하게 만드는 것입니다. Google에서 그 키워드를 사용해서 원인을 찾기조차 어렵습니다. ^ ^
만약 전단이 파라미터에 대해 유형 검사를 할 수 있다면 틀림없이 문제가 발생하는 것을 피할 수 있을 것이다. 그러나 대부분은 무심코 파낸 구덩이이다. 그것은 정말 온통 검은 선이다!!!

좋은 웹페이지 즐겨찾기