Я знаю, что ответ очень прост, но я собираюсь бананы. Кажется, я пробовал все доступные решения. Вот так…
У меня есть база данных с charset latin1 . Да, я должен иметь это в utf8 , но у меня есть несколько запущенных проектов, поэтому я не хочу их путать.
Проблема связана с SELECT
с LIKE "%...%"
Таблица utf8 с COLLATE utf8_general_ci. Поля также utf8 с utf8_general_ci сопоставлением. Мои файлы сценариев (php) кодируются utf-8, а сервер также обслуживает файлы в utf-8. Итак, все это utf-8.
Хорошо, так как все сопоставлено с utf8_general_ci, я должен быть в состоянии искать регистр, нечувствительный и акцентирующий. Например:
Имея в таблице providers
…
id providerName 1 Jose 2 José
Я должен быть в состоянии сделать …
SELECT * FROM providers WHERE providerName LIKE "%jose%"
или
SELECT * FROM providers WHERE providerName LIKE "%josé%"
И в обоих случаях возвращаются две строки. Но, с первым запросом, я получаю только строку 1; и со вторым запросом я получаю только строку два. Нечувствительный к регистру поиск, кажется, работает хорошо, но без акцента нет.
Поэтому я попытался добавить COLLATE utf8_general_ci
после LIKE "%...%"
. Тот же результат.
Затем я обнаружил, что соединение было выполнено в latin1 (vi PHP-функция mysql_client_encoding()
). Поэтому я добавил запрос каждый раз, когда было установлено соединение, что указывает на использование utf8. Я использовал как SET NAMES UTF8 COLLATE utf8_general_ci
И php mysql_set_charset()
. Когда я добавляю эту конфигурацию, первый запрос возвращает строку 1, но второй запрос не возвращает никакого результата. Кроме того, все результаты возвращают редкие символы (вы знаете, например, Ã °, даже если все было установлено на utf8).
Это меня озадачивает. Все установлено в UTF8, но оно не работает (I).
MySQL Server 5.0.95 PHP 5.2.14 Win7