>데이터 베이스 >MySQL 튜토리얼 >내 테이블이 utf8_general_ci를 사용하는데도 MySQL LIKE 연산자가 대소문자를 구분하는 이유는 무엇입니까?

내 테이블이 utf8_general_ci를 사용하는데도 MySQL LIKE 연산자가 대소문자를 구분하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-08 19:30:02509검색

Why is my MySQL LIKE operator case-sensitive even though my table uses utf8_general_ci?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.