데이터베이스에 두 개의 동일한 단어가 있습니다. 예를 들어 amor
을 검색 할 때 나는 amor
과 āmōr
이됩니다. 데이터베이스에서 āmōr
만 가져 오려면 어떻게해야합니까?mysql에 특수 문자가있는 출력을 여러 개 선택하십시오.
답변
당신은 (어떤 이유로) 정렬과 주변 혼란에 원하지 않는 경우 : MySQL은 text
에 인덱스를 사용할 수 있도록
SELECT a.text
FROM table a
WHERE a.text = 'amor'
AND BINARY(a.text) = BINARY('amor')
내가, 일반 텍스트로 첫 번째 조건을 떠난 경우에 그 존재합니다. 두 번째 조건은 검색 한 정확한 텍스트 (대문자 포함) 만 받고 있는지 확인합니다.
편집 : 댓글에 기반.
악센트 부호가있는 결과를 얻으려면 해당 액센트를 무시하는 데이터 정렬을 사용해야합니다.
SELECT a.text
FROM table a
WHERE a.text = 'amor'
COLLATE 'utf8_general_ci';
또는 :
SELECT a.text
FROM table a
WHERE a.text = 'amor'
COLLATE 'latin1_general_ci';
편집 # 2 :을 더 기반으로 사용할 필요가있는 사람은
는 아래의 어떤 시도 .. 컬럼의 정렬에 따라 달라집니다 코멘트.항상 경우에 악센트 버전은 한 경기를보다가 얻으려면 :
SELECT a.text
FROM table a
WHERE a.text = 'amor' -- this condition returns both results
ORDER BY LENGTH(BINARY(a.text)) DESC
LIMIT 1
정확한 입력을 검색하지 않기 때문에 제 경우에는 작동하지 않습니다. 나는 보통의 "amor"를 입력 할 수있는 가능성을 찾고 있는데, 특수 문자로 "āmōr"를 얻는다. –
@ChrisWinterbottom - 편집이 도움이되는지보십시오 .. – Galz
'utf8_general_ci'에 대한 쿼리가 작동하지 않습니다. 'latin1_general_ci'에 대해 여전히 두 결과를 모두 얻었습니다 ... –
그리고 현재는'COLLATION'은? 'utf8_bin'을보고 전체 텍스트 검색을 읽으십시오. 가능한 속임수 : http://stackoverflow.com/questions/500826/how-to-conduct-an-accent-sensitive-search-in-mysql – ficuscr
@ ficuscr 내 경우에는 특수 문자없이 'amor'입력이 있고 'āmōr'양식을 찾고 있습니다. –