mysql query는 수동으로 작동하지만 코드에서 실행할 때 결과가 없습니다.

StackOverflow https://stackoverflow.com/questions/931829

  •  06-09-2019
  •  | 
  •  

문제

나는 이름으로 제품을 찾기 위해 "Like"와 함께 매우 간단한 쿼리를 사용합니다.

SELECT p_pid, p_name, p_cat
FROM products
WHERE p_sid=346 AND p_name LIKE 'product name here in utf-8 encoding, can be various languages'
LIMIT 1

유효한 제품 이름으로 코드 에서이 쿼리를 실행하면 결과가 없습니다. 쿼리를 복사하고 (PHP로 에코 브라우저에 반향) MySQL 쿼리 브라우저에서 수동으로 실행하면 결과가 나타납니다. 내가 어디에서 틀렸는지 아십니까?

메모:

1. 쿼리에서 오류가 발생하지 않습니다. 결과가 없습니다. 2. EZSQL 라이브러리를 사용하고 있습니다.

도움이 되었습니까?

해결책

인코딩의 문제인 것 같습니다.

이 쿼리를 실행해보십시오.

SELECT HEX(CAST('product name here in utf-8 encoding, can be various languages' AS BINARY))

모두 ezSQL 쿼리 브라우저에서 결과를 비교하십시오.

이것은 당신에게 이진 스트림을 줄 것입니다 MySQL 실제로 고객으로부터 얻어지고 비교할 때 사용합니다.

잘못된 연결 인코딩을 설정 한 경우 ezSQL 속성, 문자열이 엉망이 될 수 있습니다 (예 : 물음표 대신 물음표 UTF 기호).

이 경우 비교는 물론 실패합니다.

업데이트:

사례 insensive collation을 강제로 시도하십시오.

SELECT  *
FROM    table
WHERE   field LIKE 'product name here in utf-8 encoding, can be various languages' COLLATE UTF8_GENERAL_CI

또한 문자열과 현장에 포함 된 데이터를 둘 다 바이너리 덤프를 게시 해 주시겠습니까?

SELECT  p_pid, p_name, p_cat,
        HEX(CAST(p_name AS BINARY)),
        HEX(CAST('product name here in utf-8 encoding, can be various languages' AS BINARY))
FROM    products
WHERE   p_pid = @pid_of_product_that_should_match_but_it_doesnt

다른 팁

머신, 데이터베이스 및 사용자는 수동 및 자동 실행 스크립트간에 동일합니까? 하나는 테스트 서버에 액세스 할 수 있고 다른 하나는 프로덕션 서버에 액세스 할 수 있습니다 (예 :).

코드를 통해 올바른 정보를 보내지 않고 코딩 오류 일 수 있으므로 무언가를 검색하므로 오류가 없지만 검색해야 할 것은 아닙니다. 코드를 수동으로 스캔하고 비트를 다시하고 문제가 될 수있는 내용이 있는지 확인하십시오.

PHP의 스 니펫은 코딩 오류 인 경우 도움이 될 수 있습니다.

도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top