MySql에서 악센트 구분 검색을 수행하는 방법
utf8 일반 CI 데이터 정렬을 사용하는 MySQL 테이블이 있습니다. 표에서 두 항목을 볼 수 있습니다.
아 바드
아 바드
다음과 같은 쿼리를 사용하고 있습니다.
SELECT * FROM `words` WHERE `word` = 'abád'
쿼리 결과는 두 단어를 모두 제공합니다.
아 바드
아 바드
MySQL이 악센트 부호가있는 단어 만 찾기를 원한다는 것을 나타내는 방법이 있습니까? 쿼리가 반환되기를 원합니다.
나쁜
이 쿼리도 시도했습니다.
SELECT * FROM `words` WHERE BINARY `word` = 'abád'
결과가 없습니다. 도와 주셔서 감사합니다.
해당 필드에 대한 검색이 항상 악센트를 구분하는 경우 필드의 데이터 정렬을 utf8_bin (utf8 인코딩 된 바이트와 동일한 지 비교 함)으로 선언하거나 악센트 표시와 un을 구분하는 언어 별 데이터 정렬을 사용합니다. -강세 문자.
col_name varchar(10) collate utf8_bin
검색이 일반적으로 악센트를 구분하지 않지만이 검색에 대해 예외를 적용하려면 시도하십시오.
WHERE col_name = 'abád' collate utf8_bin
내 버전 (MySql 5.0)에서는 대 / 소문자를 구분하지 않고 악센트를 구분하는 검색에 사용할 수있는 utf8 문자 집합 조합이 없습니다. utf8의 유일한 악센트 구분 데이터 정렬은 utf8_bin입니다. 그러나 대소 문자도 구분합니다.
내 해결 방법은 다음과 같이 사용하는 것입니다.
SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin
향후 참조를 위해 MySQL 버그는 http://bugs.mysql.com/bug.php?id=19567 입니다.
같은 오류가 발생했습니다.
내 테이블의 데이터 정렬을 (phpMyAdmin을 통해) utf8_bin으로 변경했고 문제가 해결되었습니다.
도움이 되었기를 바랍니다. :)
데이터베이스 테이블 데이터 정렬 유형이 "_ci"로 끝나는 지 확인하십시오. 이것은 대소 문자를 구분하지 않습니다.
"_ci"없이 동일하거나 가장 가까운 이름의 데이터 정렬로 변경하십시오.
예를 들어 ... "utf8_general_ci"를 "utf8_bin"Mke로 변경합니다.
SELECT * FROM `words` WHERE column = 'abád' collate latin1_General_CS
(또는 cs를 포함한 데이터 정렬)
mysql 내에서 문자의 16 진수 변수 인 HEX ()를 검색하고 프로그래밍 언어 내에서 유사한 함수를 사용하여 일치시킬 수 있습니다. 사람이 사람의 첫 글자를 선택할 수있는 목록을 작성할 때 이것은 저에게 효과적이었습니다.
글쎄, 방금 utf8_general_ci 데이터 정렬이 무엇인지 설명했습니다 (a, á, à, â, ä, å 모두 비교에서 a와 같음).
utf8_general_ci 및 utf8_unicode_ci와 관련하여 MySQL 서버 5.1에도 변경 사항이 있으므로 서버 버전에 따라 다릅니다. 문서를 더 잘 확인하십시오.
따라서 MySQL 서버 5.0이라면 utf8_general_ci 대신 utf8_unicode_ci를 사용합니다. 이는 유스 케이스에 분명히 잘못되었습니다.
수락 된 답변은 좋지만 대신 COLLATE utf8mb4_bin을 사용해야 할 수도 있습니다.
WHERE col_name = 'abád' collate utf8mb4_bin
위는 다음과 같은 오류를 수정합니다.
MySQL은 다음과 같이 말했습니다 : Documentation 1253-COLLATION 'utf8_bin'은 CHARACTER SET 'utf8mb4'에 유효하지 않습니다.
그것은 utf8_general_ci의 데이터베이스에서 MySql 서버 5.1에서 악센트를 구분하지 않고 대소 문자를 구분하지 않는 검색에 적합합니다. 여기서 column은 LONGBLOB입니다.
select * from words where '%word%' LIKE column collate utf8_unicode_ci
와
select * from words where'%word%' LIKE column collate utf8_general_ci
결과는 대소 문자를 구분하지만 악센트는 구분하지 않습니다.
참고 URL : https://stackoverflow.com/questions/500826/how-to-conduct-an-accent-sensitive-search-in-mysql
'Program Club' 카테고리의 다른 글
| HTML 문자열을 표시 할 수 없습니다. (0) | 2020.12.05 |
|---|---|
| Facebook에서 Chrome에서 "Unsafe JavaScript attempt to access frame with URL"오류를 표시합니다. (0) | 2020.12.05 |
| Python에서 문자열 변수 초기화 : ""또는 None? (0) | 2020.12.04 |
| Django 쿼리에서 반환하는 열을 제한하는 방법은 무엇입니까? (0) | 2020.12.04 |
| 스칼라 심볼의 목적? (0) | 2020.12.04 |