powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Like по datetime кириллицей
17 сообщений из 17, страница 1 из 1
Like по datetime кириллицей
    #38461970
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Ситуация следующая - жили не тужили, все было хорошо. Но один прекрасный день переехали на новый хостинг. (виртуальный) и тут начались проблемы. Почти все решили осталась одна проблема.

Есть функционал "быстрого" поиска по всем столбцам таблицы. (Естественно через like) Набор столбцов динамический и для каждого пользователя системы уникальный.

Когда появляется появляется ситуация в условии WHERE t.datetime_fileld LIKE '%Кириллические символы%' то получаю ситуацию "Ошибка в запросe (1271): Illegal mix of collations for operation 'like'".
Опытным путем установили что если в этом же запросе в like написать латинские символы - то все отлично отрабатывает.

Я так понимаю что дело в каких то настройках MySQL сервера т.к. на старом хостинге все работало хорошо, подскажите пожалуйста в чем дело.

P.S. Понимаю что не очень хорошо искать что то в datetime через like, но запрос формируется "на лету" и не хотелось бы усложнять и так не простую вещь еще и определением типа столбца и составление условий для каждого случая.

Заранее спасибо.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38461981
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить что по другим типам данных кириллица работает отлично. Значит дело не в кодировке. котора кстати везде установлена в utf8_general_ci
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462069
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что реально хранится в t.datetime_fileld ?
И какой смысл применять к дате вообще какие-либо буквенные символы?
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462399
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Реально хранится дата и время. Столбец в формате datetime. Смысл в том что фильтр применяется не конкретно к столбцу с датами а ко всем стобцам которые выведены на экран. У каждого пользователя выведен свой набор полей. В них может затесаться и дата.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462504
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять же совсем исключать поля с типом datetime из "Быстрого поиска" не вариант, т.к. можно в поле набрать 2011 и полчить все записи за этот год, не дергая более сложные фильтры при этом
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462518
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chirkoff,

Можно исключать проверку по условию, если поле типа datetime и, одновременно, искомая строка содержит хотя бы один символ, отличный от цифры, пробела, двоеточия и минуса. Тогда и быстрее будет, т.к. избавитесь от бессмысленной проверки.

А еще придется обучать пользователей, что, если они хотят ноябрь 2013 года, то вводить нужно '2013-11' и никак иначе.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462756
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это сильно усложнит логику. Проверять что введено, какие столбцы отображаются и т.д. Смысл в том что на другом хостинге все отлично работает. Тоесть нужно изменить какой то параметр СУБД, а не изобретать велосипед.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462782
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChirkoffЭто сильно усложнит логику. Проверять что введено, какие столбцы отображаются и т.д.Ну не так уж сильно, не преувеличивайте. А скорость лишней не бывает.
ChirkoffСмысл в том что на другом хостинге все отлично работает. Тоесть нужно изменить какой то параметр СУБД, а не изобретать велосипед.Ну да, нужно привести в порядок настройки кодировок. Но какие именно - не скажу, недостаточно данных.
Сравните с другим хостингом настройки в конфиге, в DDL таблицы и в командах при установке соединения.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462802
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChirkoffКогда появляется появляется ситуация в условии WHERE t.datetime_fileld LIKE '%Кириллические символы%' то получаю ситуацию "Ошибка в запросe (1271): Illegal mix of collations for operation 'like'".

Дело не в настройках сервера, а в кодировке и коллейшене этого поля.
Скорее всего, с переносом данных на новый сервер оно поменялось
(SHOW CREATE TABLE)
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462836
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
База, таблицы и столбцы в кодировке utf8_general_ci

Пример Create

CREATE TABLE `deal_contact` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'счетчик',
`deal` int(11) NOT NULL COMMENT 'id сделки',
`contact` int(11) NOT NULL COMMENT 'id контакта',
PRIMARY KEY (`id`),
KEY `deal` (`deal`),
KEY `contact` (`contact`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462840
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SHOW VARIABLES LIKE 'collation%';

collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci


Все таки мне кажется это в настройках сервера что то. Базу из дампа поднимал со старого хостинга. Да и новые таблицы я создавал для тестов. С латиницей норм, с киррилицей "Illegal mix" и все тут. Причем только в Дате, в числах и текстах проблем нет. Ерунда какая то.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38462846
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChirkoffБаза, таблицы и столбцы в кодировке utf8_general_ci

Пример Create

CREATE TABLE `deal_contact` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'счетчик',
`deal` int(11) NOT NULL COMMENT 'id сделки',
`contact` int(11) NOT NULL COMMENT 'id контакта',
PRIMARY KEY (`id`),
KEY `deal` (`deal`),
KEY `contact` (`contact`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;Это не та таблица, тут нет полей типа datetime.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38463145
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, не то скопировал. Хотя разница не большая.

CREATE TABLE `deals` (
`s_deal_id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT 'Название сделки',
`budget` double NOT NULL COMMENT 'Бюджет',
`status` smallint(3) NOT NULL COMMENT 'Статус сделки',
`respons_user` smallint(10) NOT NULL COMMENT 'Ответственный',
`edit_date` datetime NOT NULL COMMENT 'Дата редактирования',
`add_date` datetime NOT NULL COMMENT 'Дата создания',
`s_editor_id` int(10) NOT NULL COMMENT 'ID пользователя которой создал или изменил запись',
`creator_id` smallint(10) NOT NULL COMMENT 'Создатель',
`s_operation_type` int(11) NOT NULL COMMENT 'Тип операции с записью 1 - создание 2 -редактирование',
PRIMARY KEY (`s_deal_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38463151
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, таблицу видим. А остальное?
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38463221
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А дальше для примера вставим пару записей:

Код: sql
1.
2.
3.
4.
INSERT INTO `deals` (`s_deal_id`, `name`, `budget`, `status`, `respons_user`, `edit_date`, `add_date`, `s_editor_id`, `creator_id`, `s_operation_type`) VALUES
(1,	'Тест',	90000,	1,	1,	'2013-11-13 11:49:51',	'2013-11-13 11:49:51',	1,	2,	1),
(2,	'Тест2',	100000,	1,	1,	'2013-11-13 11:50:14',	'2013-11-13 11:50:14',	2,	2,	1),
(3,	'Тест3',	70000,	1,	2,	'2013-11-13 11:50:36',	'2013-11-13 11:50:36',	2,	2,	1);



После чего делаем запрос:

Код: sql
1.
2.
3.
select *
from deals d
where d.add_date like '%F%'



Который ничего нам не вернет, что логично.

Затем меняем "F" на любую русскую букву:

Код: sql
1.
2.
3.
select *
from deals d
where d.add_date like '%Ц%'



И в ответ получаем:

Ошибка в запросe (1271): Illegal mix of collations for operation 'like'
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38463225
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Остается еще раз добавить что по полям другого типа такого не происходит, проблема только с datetime. И еще то что на другом хостинге проделывая все те же операции ошибки нет.
...
Рейтинг: 0 / 0
Like по datetime кириллицей
    #38464180
Chirkoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решилось добавлением COLLATE utf8_unicode_ci в каждом условии OR для datetime.

Можно закрывать, всем спасибо.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Like по datetime кириллицей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]