Неявный реконект к MySQL.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Неявный реконект к MySQL.

Сообщение GAMER » 20.11.2010 19:54:37

Работаю с MySQL 5.5.*. Заметил, что если был обрыв связи без смены ІР, то происходит "неявное" переподключение к серверу. Вроде бы и не плохо, но есть одна проблема. Не происходит выполнение "SET NAMES UTF8". И слетает кодировка. Работаю напрямую через LibMySQL.DLL. Как-то можно отловить такое переподключение?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Неявный реконект к MySQL.

Сообщение Mr.Smart » 20.11.2010 20:22:59

А вы в каждом запросе пишите:
Код: Выделить всё
SET NAMES UTF8;
SELECT ...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Неявный реконект к MySQL.

Сообщение GAMER » 20.11.2010 20:32:11

Вариант хороший, но не оптимальный. Может я не знаю, но вроде нельзя несколько запросов в одном пакете отправлять.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Неявный реконект к MySQL.

Сообщение Mr.Smart » 20.11.2010 20:43:58

Так SET NAMES не является запросом возвращающим данные.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Неявный реконект к MySQL.

Сообщение GAMER » 20.11.2010 22:10:33

Не спорю, но как отправить 2 запроса одновременно, последовательно, в одном пакете. Символ ";", насколько я понял, работает только в клиенте mysql.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Неявный реконект к MySQL.

Сообщение Mr.Smart » 20.11.2010 23:06:44

Код: Выделить всё
Query.SQL.Add('SET NAMES UTF8; SELECT ...')
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Неявный реконект к MySQL.

Сообщение GAMER » 20.11.2010 23:25:29

TQuery не использую.
а mysql_query(MySock,'set names utf8; select ...') не работает так. Ведь он на каждый отдельный запрос дает свой ответ.
Конечно, можно разделять на отдельные запросы, но как-то не сильно хочется такое творить. Еще поковыряю саму libmysql
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Неявный реконект к MySQL.

Сообщение Mr.Smart » 20.11.2010 23:55:15

С нативной либой для MySQL не работал т.ч. сказать ничего не могу.
п.с. Если подумать - то вообще с MySQL не работал. Нет пока надобности...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Неявный реконект к MySQL.

Сообщение GAMER » 21.11.2010 02:35:29

unsigned long mysql_thread_id(MYSQL *mysql)
Описание

Возвращает идентификатор данного потока для текущего соединения. Эта величина может быть использована как аргумент для функции mysql_kill() для уничтожения данного потока.

Если соединение прерывается и осуществляется его восстановление с помощью функции mysql_ping(), то идентификатор данного потока изменится. Это означает, что нельзя получить идентификатор данного потока и хранить его для последующего использования. Следует определять его, когда в этом есть необходимость.

То есть, если идентификатор потока изменился, выполняем "set names utf8".
Но если его выполнять перед каждым запросом, то не вижу разницы с предыдущими вариантами. Разве, что не так накладно по расходам будет.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Неявный реконект к MySQL.

Сообщение Vadim » 21.11.2010 07:35:33

GAMER
А если в клиентском конфиге сервера сразу установить UTF-8? Или Вы с разными кодировками работаете?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Неявный реконект к MySQL.

Сообщение GAMER » 21.11.2010 12:12:14

Тоже думал над этим, но база, в принципе, может храниться на сервера, где эти настройки могут быть недоступными. Хотя, такой вариант более оптимален. Нужно попробовать хотя бы там, где это возможно.

Добавлено спустя 2 минуты 47 секунд:
Кроме того, есть софт, который может работать с тем же сервером, и для которого нужны свои (другие) клиентские настройки.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Неявный реконект к MySQL.

Сообщение Vadim » 21.11.2010 19:50:33

GAMER
Хорошо. А если периодически проверять кодировку с помощью mysql_client_encoding()?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Неявный реконект к MySQL.

Сообщение GAMER » 21.11.2010 20:32:11

2 Vadim. Спасибо за совет, посмотрю.

В принципе, достаточно сделать проверку при записи данных, в другом случае пользователь сам увидит бред и перезапустит программу. :)
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru