|
|
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Добрый день! Ситуация следующая - жили не тужили, все было хорошо. Но один прекрасный день переехали на новый хостинг. (виртуальный) и тут начались проблемы. Почти все решили осталась одна проблема. Есть функционал "быстрого" поиска по всем столбцам таблицы. (Естественно через like) Набор столбцов динамический и для каждого пользователя системы уникальный. Когда появляется появляется ситуация в условии WHERE t.datetime_fileld LIKE '%Кириллические символы%' то получаю ситуацию "Ошибка в запросe (1271): Illegal mix of collations for operation 'like'". Опытным путем установили что если в этом же запросе в like написать латинские символы - то все отлично отрабатывает. Я так понимаю что дело в каких то настройках MySQL сервера т.к. на старом хостинге все работало хорошо, подскажите пожалуйста в чем дело. P.S. Понимаю что не очень хорошо искать что то в datetime через like, но запрос формируется "на лету" и не хотелось бы усложнять и так не простую вещь еще и определением типа столбца и составление условий для каждого случая. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 14:53:17 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Забыл добавить что по другим типам данных кириллица работает отлично. Значит дело не в кодировке. котора кстати везде установлена в utf8_general_ci ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 14:58:34 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Что реально хранится в t.datetime_fileld ? И какой смысл применять к дате вообще какие-либо буквенные символы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 15:34:21 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Реально хранится дата и время. Столбец в формате datetime. Смысл в том что фильтр применяется не конкретно к столбцу с датами а ко всем стобцам которые выведены на экран. У каждого пользователя выведен свой набор полей. В них может затесаться и дата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 17:22:54 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Опять же совсем исключать поля с типом datetime из "Быстрого поиска" не вариант, т.к. можно в поле набрать 2011 и полчить все записи за этот год, не дергая более сложные фильтры при этом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 18:20:56 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Chirkoff, Можно исключать проверку по условию, если поле типа datetime и, одновременно, искомая строка содержит хотя бы один символ, отличный от цифры, пробела, двоеточия и минуса. Тогда и быстрее будет, т.к. избавитесь от бессмысленной проверки. А еще придется обучать пользователей, что, если они хотят ноябрь 2013 года, то вводить нужно '2013-11' и никак иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 18:38:19 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Это сильно усложнит логику. Проверять что введено, какие столбцы отображаются и т.д. Смысл в том что на другом хостинге все отлично работает. Тоесть нужно изменить какой то параметр СУБД, а не изобретать велосипед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 22:20:33 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
ChirkoffЭто сильно усложнит логику. Проверять что введено, какие столбцы отображаются и т.д.Ну не так уж сильно, не преувеличивайте. А скорость лишней не бывает. ChirkoffСмысл в том что на другом хостинге все отлично работает. Тоесть нужно изменить какой то параметр СУБД, а не изобретать велосипед.Ну да, нужно привести в порядок настройки кодировок. Но какие именно - не скажу, недостаточно данных. Сравните с другим хостингом настройки в конфиге, в DDL таблицы и в командах при установке соединения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 22:37:44 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
ChirkoffКогда появляется появляется ситуация в условии WHERE t.datetime_fileld LIKE '%Кириллические символы%' то получаю ситуацию "Ошибка в запросe (1271): Illegal mix of collations for operation 'like'". Дело не в настройках сервера, а в кодировке и коллейшене этого поля. Скорее всего, с переносом данных на новый сервер оно поменялось (SHOW CREATE TABLE) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 22:52:28 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
База, таблицы и столбцы в кодировке 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 23:56:38 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
SHOW VARIABLES LIKE 'collation%'; collation_connection utf8_general_ci collation_database utf8_general_ci collation_server utf8_general_ci Все таки мне кажется это в настройках сервера что то. Базу из дампа поднимал со старого хостинга. Да и новые таблицы я создавал для тестов. С латиницей норм, с киррилицей "Illegal mix" и все тут. Причем только в Дате, в числах и текстах проблем нет. Ерунда какая то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 00:03:14 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 00:14:45 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, не то скопировал. Хотя разница не большая. 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:26:45 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Хорошо, таблицу видим. А остальное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:28:21 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
А дальше для примера вставим пару записей: Код: sql 1. 2. 3. 4. После чего делаем запрос: Код: sql 1. 2. 3. Который ничего нам не вернет, что логично. Затем меняем "F" на любую русскую букву: Код: sql 1. 2. 3. И в ответ получаем: Ошибка в запросe (1271): Illegal mix of collations for operation 'like' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:55:31 |
|
||
|
Like по datetime кириллицей
|
|||
|---|---|---|---|
|
#18+
Остается еще раз добавить что по полям другого типа такого не происходит, проблема только с datetime. И еще то что на другом хостинге проделывая все те же операции ошибки нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:58:53 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38463225&tid=1835727]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 277ms |

| 0 / 0 |
