2012-02-14 2 views
0

하나의 MySQL 절차에 문제가 있습니다. 프로 시저 자체는 라틴 문자를 사용할 때만 작동합니다. 키릴 문자를 사용하면 작동하지 않습니다. 이 테이블은 "SET NAMES 'utf8'"페이지 상단에있는 utf8_general_ci에 있습니다. 이 게시물에 관한 도움을 주시면 감사하겠습니다. 아래는 제 코드입니다. 데이터를 보내도록 설정 특정 문자를 사용하는 클라이언트에는 mysql 말해, 당신이 열려있는 연결 및 데이터베이스 선택 후 SET NAMES를 사용한다, 그것이 작동되도록하기 위해서는MySQL 절차. LIKE 패턴 일치 - 키릴 문자

CREATE PROCEDURE `selUsers`(IN usrNme VARCHAR(25)) 
BEGIN 


SELECT * 
    FROM users WHERE 1 
     AND (user_real_name LIKE CONCAT('%', usrNme, '%') OR user_company LIKE CONCAT('%', usrNme, '%') OR user_name LIKE CONCAT('%', usrNme, '%')) 
    ORDER BY user_real_name ASC LIMIT 0, 15; 

    END 

답변

2

. 자세한 내용은 here을 확인하십시오. 특정 사례를 들어, 나는 utf8_general_ci 대신 utf8_unicode_ci 사용합니다, 또한

SET NAMES utf8 

해야한다. utf8_unicode_ci가 utf8_general_ci보다 느린 것은 사실이지만 비교 (더 정확함)는 더 우수합니다 ... utf8_general_ci는 러시아어불가리아어 키릴 어 하위 집합에 대해서만 유효합니다. 당신이 그 cyrilic 알파벳에서 문자의 일부를 사용할 경우 에 벨라루스어, 마케도니아어, 세르비아어우크라이나어을 사용하여 추가 문자가 잘 정렬되지 않습니다 ... 당신은 마음이 있어야합니다.

+0

답장을 보내 주셔서 감사합니다. 알겠습니다. 나는 절차를 변경했으나 키릴 문자로 검색 할 때 아무런 결과도 얻지 못했습니다. 아래는 새로운 코드입니다. DELIMITER // 작성 프로 시저 selUsers (usrNme VARCHAR (25)) BEGIN SET NAMES 'utf8'; SELECT USER_ID, user_real_name, user_company, 사용자 1 사용자 _ AND (user_real_name LIKE CONCAT ('%', usrNme, '%') OR CONCAT ('%', usrNme, user_company LIKE '%') OR FROM USER_NAME \t CONCAT ('%', usrNme, '%')) \t ORDER BY user_real_name ASC LIMIT 0, 15; 끝 // DELIMITER; –

+0

문제가 프로 시저에 있다고 생각하지 않지만 코드에서 호출하는 방법. 연결을 연 후 SET NAMES utf8 명령을 실행 한 다음 작동 방식을 확인하십시오. –

+0

이전에 프로 시저를 호출하기 위해 set NAMES utf8을 사용하고 mysql_query ("CALL selUsers ('". $ que. "')"); 감사. –