Почему UPPER () не работает в MySQL? - PullRequest
4 голосов
/ 19 июня 2009

Мой запрос SQL выбирает некоторые столбцы из представления с необязательным полем сортировки. По сути, мое представление объединяет несколько полей в одну адресную строку, так что я получаю что-то вроде

123 Sesame Street Birdtown

в адресной колонке. Я хочу, чтобы в поиске не учитывался регистр (по умолчанию это не так), поэтому я попробовал это:

SELECT * FROM BasicJobInfo WHERE UPPER(address) LIKE UPPER(searchString)

, где searchString - это адрес, который я хочу найти. Тем не менее, MySQL, кажется, не может преобразовать адрес в UpperCase - я попытался просто позвонить

SELECT UPPER(address) FROM BasicJobInfo

но это совсем не меняет дела. Есть мысли о том, почему это может быть?
Кроме того, какие-либо предложения относительно того, как еще я могу сделать поиск без учета регистра?
Большое спасибо.

Ответы [ 3 ]

14 голосов
/ 19 июня 2009

Согласно странице Справочного руководства MySQL по строковым функциям :

UPPER () неэффективен применительно к двоичные строки (BINARY, VARBINARY, BLOB).

Возможно ли, что ваш столбец ADDRESS имеет тип данных BINARY, VARBINARY или BLOB?

Если это так, вам нужно преобразовать двоичную строку в "обычную" строку . Например:

UPPER(CONVERT(ADDRESS USING latin1))
1 голос
/ 19 июня 2009

Это может быть связано с проблемами кодирования. Выполнение сравнений без учета регистра описано в приложении на страницах справки mysql . Пример сравнения столбца / строки UTF8 без учета регистра:

SELECT *
FROM YourTable
WHERE address LIKE 'searchString' COLLATE utf8_general_ci;
1 голос
/ 19 июня 2009

Не могли бы вы выполнить следующие запросы:

SELECT  @@character_set_server, @@collation_server

SELECT  HEX(CAST(UPPER(address) AS binary)), HEX(CAST(address AS binary))
FROM    BasicJobInfo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...