MySQL VARCHAR странное поведение столбца - PullRequest
0 голосов
/ 11 мая 2010

У меня есть следующий оператор SQL, который возвращает одну запись, как и ожидалось:

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

Однако, если я использую следующий оператор SQL, записи не возвращаются. Я только изменил предложение LIKE на предложение равно:

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

Кто-нибудь может помочь мне понять, почему это может происходить?

Аналогично, со следующим утверждением:

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

Возвращает:

10 | 9 | Австралия

РЕДАКТИРОВАТЬ

Вот пример SQL, который я использовал для импорта данных:

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

Похоже, \ n наносит ущерб моим данным. Я постараюсь импортировать с альтернативными вариантами завтра.

1 Ответ

1 голос
/ 11 мая 2010

Во втором случае вам требуется точное совпадение в базе данных, тогда как в первом случае имя должно содержать строку «JAN JUE». Является ли полное имя точно "JAN JUE" в базе данных? Вам также может понадобиться проверить ваш корпус. Я знаю, что для MS-SQL вы можете указать предпочитаемый режим обработки для сравнения. Один выбор может быть чувствителен к регистру, а другой нет.

Заметки об этом для предложения like в MySql: http://www.mysqltutorial.org/sql-like-mysql.aspx

EDIT

MySql Trim () удаляет только пробелы. Таким образом, вы могли бы иметь разрыв строки. (Это также могут быть неразрывные пробелы, вам может потребоваться проверить, удаляет ли их также триммер, и не может найти однозначного ответа.) Поскольку вы получаете другую длину в полях еще одного, я бы предложил чтобы убедиться, что в ваших данных нет таких скрытых символов.

Об этой проблеме говорится в этом вопросе о переполнении стека: Разве функция MySQL TRIM не обрезает разрывы строк или возврат каретки?

...