source

SQL 쿼리가 잘못된 결과를 제공함

goodcode 2022. 11. 5. 11:38
반응형

SQL 쿼리가 잘못된 결과를 제공함

실행된 쿼리는 story_id와 제공된 문자열이 일치해야 하는데 쿼리를 실행하면 잘못된 결과가 나타납니다.스크린샷을 참조해 주세요.

여기에 이미지 설명 입력

story_id이 경우 컬럼은INT(또는 숫자) 데이터 유형.

이 경우 MySQL은 자동 타이프캐스팅을 수행합니다.그렇게,5bff82...에 타이프 캐스팅되다5그러면 다음 행에 해당하는 행이 나옵니다.story_id= 5

식 평가에서의 유형 변환

연산자가 다른 유형의 오퍼랜드와 함께 사용되는 경우 오퍼랜드의 호환성을 확보하기 위해 type conversion이 발생합니다.일부 변환은 암묵적으로 이루어집니다.예를 들어 MySQL은 필요에 따라 문자열을 숫자로 자동 변환하고 그 반대의 경우도 마찬가지입니다.

이상적으로는 어플리케이션코드가 이 입력을 처리할 수 있을 정도로 견고해야 합니다.입력이 숫자만 될 것으로 예상할 경우 MySQL 서버로 전송하기 전에 응용 프로그램코드가 데이터에 대한 검증 조작을 사용하여 데이터가 숫자인지 확인할 수 있습니다.

또 다른 방법은 명시적으로 타이프캐스트를 하는 것입니다.story_id문자열 데이터 유형으로 지정한 후 비교를 수행합니다.그러나방법은 인덱싱을 사용할 수 없으므로 권장되지 않습니다.

SELECT * FROM story
WHERE (CAST story_id AS CHAR(12)) = '5bff82...'

위의 쿼리를 실행하면 결과가 표시되지 않습니다.

다음과 같이 smth를 사용할 수도 있습니다.

SELECT * FROM story
WHERE regexp_like(story_id,'^[1-5]{1}(.*)$');

story_ids는 임의의 숫자로 시작하여 그 이후의 문자 수에 일치하지 않습니다.story_id=5; 스트링과 명시적으로 일치시키려면

언급URL : https://stackoverflow.com/questions/53533089/sql-query-giving-wrong-results

반응형