암시적 유형 변환 주의
데이터베이스는 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에서 그 키워드를 사용해서 원인을 찾기조차 어렵습니다. ^ ^
만약 전단이 파라미터에 대해 유형 검사를 할 수 있다면 틀림없이 문제가 발생하는 것을 피할 수 있을 것이다. 그러나 대부분은 무심코 파낸 구덩이이다. 그것은 정말 온통 검은 선이다!!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.