MySQL의 대소문자 구분 이해
LIKE 연산자를 사용하는 MySQL 쿼리는 테이블이 utf8_general_ci로 인코딩되었음에도 불구하고 대소문자를 구분하는 것 같습니다. MyISAM 스토리지 엔진을 사용합니다. 이 동작은 혼란스러울 수 있으며 문제를 해결하려면 근본 원인을 이해하는 것이 중요합니다.
바이너리 문자열과 비바이너리 문자열 비교:
이를 이해하는 열쇠 동작은 이진 문자열 비교와 이진이 아닌 문자열 비교의 구별에 있습니다. 기본적으로 MySQL은 utf8_general_ci를 포함한 대부분의 문자 집합에 대해 대소문자를 구분하는 비이진 문자열 비교를 수행합니다.
이진 비교로 대/소문자 구분 수정:
대소문자 구분 문제를 해결하려면 이진 문자열 비교를 사용하도록 쿼리를 수정하면 됩니다. 이는 LIKE 연산자의 오른쪽 피연산자 앞에 BINARY 키워드를 추가하여 수행됩니다. 수정된 쿼리는 다음과 같습니다.
SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';
이 수정으로 인해 MySQL은 대소문자를 구분하지 않는 이진 문자열 비교를 사용하게 됩니다.
COLLATE를 사용하는 대체 솔루션:
대소문자를 구분하지 않는 문자열 비교를 수행하는 또 다른 접근 방식은 COLLATE 절을 사용하는 것입니다. COLLATE 절은 문자열 비교에 적용할 문자 집합과 대조 규칙을 지정합니다. utf8_bin 데이터 정렬을 지정하면 MySQL이 이진 문자열 비교를 사용하도록 할 수 있습니다. COLLATE를 사용한 쿼리는 다음과 같습니다.
SELECT .... FROM .... WHERE `concatenated` LIKE '%SearchTerm%' COLLATE utf8_bin;
위 내용은 내 테이블이 utf8_general_ci를 사용하는데도 MySQL LIKE 연산자가 대소문자를 구분하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!