2012-06-27 4 views
1

간단한 Select Query와 특수 문자에 문제가 있습니다. 나는 Änne이라는 이름을 선택하고 싶다.특수 문자와 간단한 select 쿼리

SELECT * FROM `names` WHERE `name` = 'Änne' 

utf8_general_ci

알았지 ...

UTF8 일반 CI는 매우 간단한 정렬입니다. 그것은 단지 이 모든 악센트를 제거한 다음 대문자로 변환하고 비교할 "기본 문자"결과 문자의 이런 종류의 코드를 사용합니다. http://forums.mysql.com/read.php?103,187048,188748

utf8_unicode_ci

이유는 무엇입니까?

  • utf8_bin 앤

utf8_bin이 시점에서 올바른 선택이 될 것 같다,하지만 난 내 검색 케이스 insensitiv을해야한다. 그렇게 할 수있는 방법은

  • 없음

utf8_bin

SELECT * FROM `names` WHERE `name` = 'änne' 

없습니까?

PHP로 ucwords()를 사용하여 첫 글자를 대문자로 쓸 수 있지만 DB 솔루션을 선호합니다. 편집 : 나는 '앤'과 '앤'의 차이가 없기 때문에 ucwords ('앤') = 앤, 그래서 내가 너무


SELECT * FROM `names` WHERE lower(`name`) = 'änne' 

나를 위해 작동하는지 사용하지 못할 내 DB.

답변

1

대해 무엇을 :

SELECT * FROM `names` WHERE upper(`name`) = upper("änne") 

Quoting doc :

기본 문자 집합 및 정렬은 라틴과 latin1_swedish_ci, 그래서 이진이 아닌 문자열 비교는 기본적으로 대소 문자를 구분하지 있습니다.즉, col_name LIKE 'a %'로 검색하면 A 또는 a로 시작하는 모든 열 값을 가져옵니다. 민감한이 검색 케이스하려면 피연산자 중 하나가 당신이 이진 데이터 정렬을 설정했기 때문에 민감한 결과가이 경우를 의미 대소 문자를 구분 또는 이진 정렬

이 있는지 확인하십시오. 당신은 utf8_general_ci 및 검색 수에 그것을 변경하는 정렬 열을 설정할 수 있습니다

SELECT * FROM names WHERE name = "Änne" 

테이블 이름과 필드 이름 주위에 따옴표를 제거 :는 MySQL의 코드에서 오류가 있습니다

col_name COLLATE latin1_general_cs LIKE 'a%' 
+0

모든 문자가 대문자로 변경된 문자열을 반환하므로 upper를 사용할 수 없습니다. 제 경우에는 단지 첫 글자입니다. '이름 '에 änne'' 결과 : # 1253 - COLLATION'latin1_general_cs의 = 부씩 이름 SELECT * FROM latin1_general_cs는이 경우의 영향을받지 특별한 비교 의존하는 것 같다 UTF8 ' – s3mre8

+0

읽기 문서'문자 집합 유효하지 않습니다 ' 문자 '기본'문자와 viceversa. – danihp

+0

utf8_general_ci http://forums.mysql.com/read.php?103,187048,188748 – s3mre8

0

.

+0

죄송합니다. 처음 시도했을 때 이상한 오류 메시지가 표시되어 백틱을 삭제했습니다. 이제 괜찮을거야. – s3mre8

관련 문제