Intereting Posts
Как отображать повторяющееся изображение, хранящееся в базе данных на фоне, как на Twitter? Введите дату и время в Mysql Проверьте, заканчивается ли строка с номером в PHP Самые популярные сообщения WordPress без использования плагинов Url не использует php curl Как предотвратить инъекцию mysql при использовании предложения mysql IN без activeRecord в Yii? Создание следующего значения последовательности вручную в Doctrine 2 Ошибка в получении последнего вставленного идентификатора запроса с использованием пакетной вставки в CodeIgniter Несколько видов просмотра Codeigniter в одном представлении Как я могу прочитать php-файл в строку, используя php? Пространства имен в php 5.2 Система рефералов пользователей с использованием PHP и MySQL Как исправить «Неподдерживаемый пост-запрос» при публикации на странице поклонника FB? Как запустить файл PHP в запланированной задаче (Планировщик задач Windows) Проверить значение NULL в переменной, которая не может быть установлена

MySQL кодировки и сортировки: нечувствительность к акценту не работает

Я знаю, что ответ очень прост, но я собираюсь бананы. Кажется, я пробовал все доступные решения. Вот так…

У меня есть база данных с 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