mysql query는 수동으로 작동하지만 코드에서 실행할 때 결과가 없습니다.
문제
나는 이름으로 제품을 찾기 위해 "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의 스 니펫은 코딩 오류 인 경우 도움이 될 수 있습니다.
도움이 되었기를 바랍니다.