Неявный реконект к MySQL.
Модератор: Модераторы
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Неявный реконект к MySQL.
Работаю с MySQL 5.5.*. Заметил, что если был обрыв связи без смены ІР, то происходит "неявное" переподключение к серверу. Вроде бы и не плохо, но есть одна проблема. Не происходит выполнение "SET NAMES UTF8". И слетает кодировка. Работаю напрямую через LibMySQL.DLL. Как-то можно отловить такое переподключение?
А вы в каждом запросе пишите:
Код: Выделить всё
SET NAMES UTF8;
SELECT ...Так SET NAMES не является запросом возвращающим данные.
Код: Выделить всё
Query.SQL.Add('SET NAMES UTF8; SELECT ...')- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
TQuery не использую.
а mysql_query(MySock,'set names utf8; select ...') не работает так. Ведь он на каждый отдельный запрос дает свой ответ.
Конечно, можно разделять на отдельные запросы, но как-то не сильно хочется такое творить. Еще поковыряю саму libmysql
а mysql_query(MySock,'set names utf8; select ...') не работает так. Ведь он на каждый отдельный запрос дает свой ответ.
Конечно, можно разделять на отдельные запросы, но как-то не сильно хочется такое творить. Еще поковыряю саму libmysql
С нативной либой для MySQL не работал т.ч. сказать ничего не могу.
п.с. Если подумать - то вообще с MySQL не работал. Нет пока надобности...
п.с. Если подумать - то вообще с MySQL не работал. Нет пока надобности...
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
unsigned long mysql_thread_id(MYSQL *mysql)
Описание
Возвращает идентификатор данного потока для текущего соединения. Эта величина может быть использована как аргумент для функции mysql_kill() для уничтожения данного потока.
Если соединение прерывается и осуществляется его восстановление с помощью функции mysql_ping(), то идентификатор данного потока изменится. Это означает, что нельзя получить идентификатор данного потока и хранить его для последующего использования. Следует определять его, когда в этом есть необходимость.
То есть, если идентификатор потока изменился, выполняем "set names utf8".
Но если его выполнять перед каждым запросом, то не вижу разницы с предыдущими вариантами. Разве, что не так накладно по расходам будет.
GAMER
А если в клиентском конфиге сервера сразу установить UTF-8? Или Вы с разными кодировками работаете?
А если в клиентском конфиге сервера сразу установить UTF-8? Или Вы с разными кодировками работаете?
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Тоже думал над этим, но база, в принципе, может храниться на сервера, где эти настройки могут быть недоступными. Хотя, такой вариант более оптимален. Нужно попробовать хотя бы там, где это возможно.
Добавлено спустя 2 минуты 47 секунд:
Кроме того, есть софт, который может работать с тем же сервером, и для которого нужны свои (другие) клиентские настройки.
Добавлено спустя 2 минуты 47 секунд:
Кроме того, есть софт, который может работать с тем же сервером, и для которого нужны свои (другие) клиентские настройки.
GAMER
Хорошо. А если периодически проверять кодировку с помощью mysql_client_encoding()?
Хорошо. А если периодически проверять кодировку с помощью mysql_client_encoding()?
