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
'source' 카테고리의 다른 글
Java Desktop 애플리케이션: SWT vs. Swing (0) | 2022.11.05 |
---|---|
MyISAM과 InnoDB의 차이점은 무엇입니까? (0) | 2022.11.05 |
다차원 어레이를 단일 어레이로 변환 (0) | 2022.11.05 |
그래프와 일치하도록 Matplotlib 색상 막대 크기 설정 (0) | 2022.11.05 |
MariaDB: JSON의 합계값 (0) | 2022.11.05 |