illegal mix of collations for operation like

Freeman

Новичок

Выборка из таблицы LIKE (русские буквы)

Требуется сделать поиск по таблице вида
id | title (varchar 255, cp1251_bin) | text (text, cp1251_bin)

При выборе из таблицы запросом WHERE. LIKE ‘русские буквы’ phpMyAdmin выдает ошибку
#1267 — Illegal mix of collations (cp1251_bin,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘like’
В скрипте выполняю этот запрос (mysql_query()) — вообще ничего не возвращает (вернее возвращает ошибку)
Как такое победить. Причем для некторых слов поиск проходит и выдается результат, но неполный (не все записи, имеющие совпадение с введенным словом).
P.S.: PHP 4.3.6, MySQL 4.1, Win2000 Server
P.S.S.: SET NAMES ‘cp1251’ и SET CHARACTER SET ‘cp1251’ сделал.

Апельсин

Оранжевое создание

Freeman

Новичок

collation_connection utf8_general_ci
collation_database cp1251_general_ci
collation_server latin1_swedish_ci

Как я понимаю, все кодировки надо привести к единому «стандарту». Можно это сделать запросами или надо обязательно лезть в конфиги MySQL?

Апельсин

Оранжевое создание

ну так ничего удивительного в ошибке нет.

если set names в phpmyadmin делал, значит он каждый раз заново открывает соединение при выполнении запроса.
смотри может в конфигах самого phpmyadmin настроить как-то можно.

Freeman

Новичок

Profic

just Profic (PHP5 BetaTeam)

1) вопрос, зачем cp1251_bin если есть сp1251_general_ci, bin букву ё будет в начало списка загонять при сортировке (если это конечно важно

если ничего не хочется трогать , то можно написать [sql]WHERE CONVERT(field, utf8_general_ci) LIKE ‘бла-бла'[/sql] (или где-то так) и таким же образом переделать все запросы
или скормить phpMyAdmin-у конструкцию
[sql]
SET NAMES cp1251_bin;
SELECT . WHERE field LIKE ‘бла-бла’;
[/sql]
за один раз, но этот вариант может не работать.
ADD: не будет работать. еще это ‘бла-бла’ тоже нужно из utf в cp1251 сконвертировать CONVERT()-ом

2) я не понял — в качестве интерфейса используется phpMyAdmin или что-то самописное?
если самописное, то я на такую проблему обычно не обращаю внимание — тестовые запросы изменяю в соответствии (1)

Freeman

Новичок

Да, использую свой (вернее, не свой, к сожалению) скрипт. Спасибо за ответ, буду переделывать исходники

Что-то у меня ошибочка выдается на utf8_general_ci. А если заглянуть в справочное руководство, то там говорится следующее:

где аргумент type представляет один из типов:
BINARY
DATE
DATETIME
SIGNED
TIME
UNSIGNED

Блин, ведь должна же быть в mysql функция «приведения кодировок».

И еще такой вопрос: создение полнотекстового индекса FULLTEXT поможет ускорить поиск? Или я неверно понимаю назначение этого индекса? Сама база пока небольшая (порядка 500 статей по 5-6 страниц в среднем).

I have successfully implemented Ignited-Datatables. However, while searching with database when typing «non-latin» characters like «İ,ş,ğ. «

POST 500 (Internal Server Error)

%İ% part changes according to the non-latin character you typed.

Any idea for solving this?

5 Answers 5

I figured out the problem. It seems it is DATETIME fields that causes the problem.

gives error for Illegal mix of collations for operation ‘like’ . When I remove LIKE partials DATETIME fields, there are no error any more. I hope this helps.

Try the following:

Also you can refer to MySQL _bin and binary Collations for more information on utf8_bin :

Nonbinary strings (as stored in the CHAR, VARCHAR, and TEXT data types) have a character set and collation. A given character set can have several collations, each of which defines a particular sorting and comparison order for the characters in the set. One of these is the binary collation for the character set, indicated by a _bin suffix in the collation name. For example, latin1 and utf8 have binary collations named latin1_bin and utf8_bin.

Besschetnov Nikolai

Дата последнего входа: более года назад

Столкнулся с проблемой несовпадения collations в БД. Интернет подобным просто кишит. Видал подобная проблема была озвучена на форумах, и был дан комплект SQL запросов напрямую к СУБД для её решения.

У меня возникла ошибка вида

Вот шаблон к ее решению
1. Удаляем модуль поиск, включая таблицы и статистику.
2. Устанавливаем модуль вновь.

Подключаемся к СУБД с достаточными правами на модификацию таблиц в конкретной БД.
Я определил себе следующий пакет запросов

Оцените статью