2010-05-11 4 views
0

나는 예상대로 단일 레코드를 반환하는 다음과 같은 SQL 문을 가지고있다. 난 단지 절에 동일한에 LIKE 절을 변경 :MySQL의 VARCHAR 이상한 열 동작

select * from geodatasource_cities C,
geodatasource_countries D
where C.CC_FIPS = D.CC_FIPS
and D.CC_ISO='AU'
and UCASE(TRIM(C.FULL_NAME_ND)) = 'JAN JUE';

는 아무도 이런 일이되는 이유 나를 이해하는 데 도움 주실 래요? 다음 문을 유사하게

이 :

select LENGTH(COUNTRY_NAME),
LENGTH('Australia'),
COUNTRY_NAME
from countries
WHERE UCASE(TRIM(COUNTRY_NAME)) LIKE '%AUSTRALIA%'

그것은 반환

10 | 9 | 의 \ n은 내 데이터에 혼란을 wreaking되는 것처럼

load data local infile 'CITIES.TXT'
into table geodatasource_cities
fields terminated by '\t'
lines terminated by '\n'
(CC_FIPS,FULL_NAME_ND);

이 나타납니다 : 호주

편집 여기

내가 데이터를 가져 오는 데 사용되는 SQL의 샘플입니다. 내일 대안 옵션을 사용하여 가져 오기를 시도 할 것입니다.

+0

FULL_NAME_ND의 유형은 무엇입니까 :

이 문제는이 스택 오버플로 질문에 대해 얘기입니까? 이진 문자열입니까? – a1ex07

+0

그것은 VARCHAR 컬럼입니다 – Mat

+0

'JAN JUE'와 같은 UCASE (TRIM (C.FULL_NAME_ND))가 일치합니까? – ICodeForCoffee

답변

0

두 번째 경우에는 데이터베이스에서 정확하게 일치해야하지만 첫 번째 경우에는 이름에 "JAN JUE"라는 문자열이 있어야합니다. 전체 이름은 정확히 "JAN JUE"데이터베이스에 있습니까? 케이스를 확인해야 할 수도 있습니다. MS-SQL의 경우 비교를 위해 대소 문자를 선호하는 처리 방법을 지정할 수 있습니다. 하나의 선택은 대소 문자를 구별하며 다른 하나는 그렇지 않을 수 있습니다. MySQL은 같은 절에 그것에 대해

참고 : http://www.mysqltutorial.org/sql-like-mysql.aspx

편집

MySQL의 트림() 공백 만 제거합니다. 그래서 당신은 줄 바꿈을 할 수 있습니다. (또한 비 단선 공백이 될 수도 있습니다. 트림이 트리밍을 제거하는지 테스트해야 할 수도 있습니다. 이에 대한 확실한 답을 찾을 수 없습니다.) 하나의 필드에서 다른 길이를 얻은 이후로, 데이터에 숨겨진 문자가 없는지 확인하십시오. Does the MySQL TRIM function not trim line breaks or carriage returns?

+0

처음에는 케이스 문제라고 생각했기 때문에 FULL_NAME_ND 필드를 다음으로 변환했습니다. 대문자이므로 같은 경우에 비교할 수 있습니다. – Mat

+0

CRUDE! 예, 어떻게 작성했는지는 중요하지 않습니다. FULL_NAME_ND의 텍스트는 "Jan Jue"입니다. – ICodeForCoffee

+0

오, 그건 그렇고, "Jan Jue"는 데이터베이스에 있습니다. 실제로 "Jan Juc"이되어야합니다. 문제를 해결하기 위해 데이터를 처음 발견했을 때의 문제점을 발견했습니다. – Mat