복붙노트

[SQL] where 절에서 정수 캐스팅에 MySQL을 자동 문자열?

SQL

where 절에서 정수 캐스팅에 MySQL을 자동 문자열?

나는 MySQL의 새로운 모르지만, 이상한 상황이 나를 놀라게 가지고있는 우연히 오늘 내 코드에서 일어났다. 이 나에게 동일한 결과를 제공하는 이유 누군가가 설명 할 수 있습니까?

SELECT * FROM `products` WHERE id = 12

SELECT * FROM `products` WHERE id = '12ABC'

같은 레코드가 선택되면서 두 경우 모두에서 나는 같은 결과를 얻을. 그 두 번째는 나에게 아무것도 돌려주지 않는 것이라고 기대! 내 ID 필드는 AUTO_INCREMENT 플래그가 켜져와 부호없는 INT (11)이다.

해결법

  1. ==============================

    1.MySQL의 문서에서 :

    MySQL의 문서에서 :

    선적 서류 비치

    그러니까 기본적으로, '12ABC'는 12으로 캐스팅된다.

  2. ==============================

    2.MySQL은 변환이 2 개 다른 유형 사이에 비교 할 수 있도록한다. 그것은 int와 문자열을 처음부터 시작하는 문자열에서 숫자를 얻기 위해 시도합니다.

    MySQL은 변환이 2 개 다른 유형 사이에 비교 할 수 있도록한다. 그것은 int와 문자열을 처음부터 시작하는 문자열에서 숫자를 얻기 위해 시도합니다.

    그것은 당신이 예를 들어했다

    'ABC12'
    

    INT에 문자열 변환의 결과는 0이 될 것이다

  3. from https://stackoverflow.com/questions/33543671/mysql-automatic-string-to-integer-casting-in-where-clause by cc-by-sa and MIT license