MySQL меняет кодировку после переподключения |
Здравствуйте, гость ( Вход | Регистрация )
MySQL меняет кодировку после переподключения |
22.11.2008 - 11:29
Вставить ник | Быстрая цитата | Сообщение
#1
|
|
/dev/random Группа: Участник Сообщений: 2216 Регистрация: 5.11.2006 Пользователь №: 16651 |
Есть MySQL 5.0.45.
После апгрейда на него длительное время не мог разобраться, почему периодически падает коннект к БД, что при запросах выводится "MySQL server has gone away". В итоге нашел такой параметр для mysql_options(), который нужно задавать перед непосредственно mysql_connect(): Цитата MYSQL_OPT_RECONNECT (argument type: my_bool *) Enable or disable automatic reconnection to the server if the connection is found to have been lost. Reconnect has been off by default since MySQL 5.0.3; this option is new in 5.0.13 and provides a way to set reconnection behavior explicitly. Действительно, падать подключение перестало. Однако после восстановления связи весь текст на кириллице начинает выводиться в виде "????? ?? ????". Проверяю кодировку - и вижу, что вместо cp1251, с которой происходит коннект по умолчанию, выставлено latin1. wtf? Судя по описанию опции, действительно сбрасываются все временные настройки, например, выставленные через SET NAMES. Только у меня SET NAMES нигде не применяется. Как и переназначение кодировок после подключения в целом. Поэтому и вопрос. Куда воткнуть этот SET NAMES, если с точки зрения программы никакого переподключения в целом не произошло и соединение не падало, т.к. оно восстанавливается автоматически и программа этого не замечает? Или как заставить реконнект не сбрасывать кодировку? |
|
|
22.11.2008 - 17:06
Вставить ник | Быстрая цитата | Сообщение
#2
|
|
Частый гость Группа: Участник Сообщений: 192 Регистрация: 30.10.2005 Пользователь №: 10364 |
Куда воткнуть этот SET NAMES, если с точки зрения программы никакого переподключения в целом не произошло и соединение не падало, т.к. оно восстанавливается автоматически и программа этого не замечает? Или как заставить реконнект не сбрасывать кодировку? Сразу же после коннекта: Код mysql_query("set names cp1251;");
Сообщение отредактировано srv - 22.11.2008 - 17:07 |
|
|
23.11.2008 - 10:48
Вставить ник | Быстрая цитата | Сообщение
#3
|
|
/dev/random Группа: Участник Сообщений: 2216 Регистрация: 5.11.2006 Пользователь №: 16651 |
Я так понял из мануала, что выставленные после первого коннекта таким образом кодировки будут сброшены при автореконнекте.
А сразу же после автореконнекта отправить такой запрос из программы не получится, т.к. программа и не узнает о том, что автореконнект произошел. Вбил в модуль работы с бд mysql_options(dbc, MYSQL_INIT_COMMAND, "set names cp1251"), жду следующего обрыва связи. Цитата MYSQL_INIT_COMMAND (argument type: char *)
Statement to execute when connecting to the MySQL server. Automatically re-executed if reconnection occurs. |
|
|
25.11.2008 - 16:41
Вставить ник | Быстрая цитата | Сообщение
#4
|
|
/dev/random Группа: Участник Сообщений: 2216 Регистрация: 5.11.2006 Пользователь №: 16651 |
Не помогло.
Теперь неудивительно, почему по умолчанию переподключение к базам отключено. Настолько косячную реализацию уметь надо сделать, наверное. Есть ещё какие-либо варианты? |
|
|
25.11.2008 - 21:53
Вставить ник | Быстрая цитата | Сообщение
#5
|
|
Частый гость Группа: Участник Сообщений: 192 Регистрация: 30.10.2005 Пользователь №: 10364 |
Есть MySQL 5.0.45. .... mysql_connect(): ................ а на чем пишешь -то? Может-поможет 9.1.5. Configuring the Character Set and Collation for Applications ]]>http://dev.mysql.com/doc/refman/5.0/en/cha...plications.html]]> Сообщение отредактировано srv - 25.11.2008 - 22:03 |
|
|
30.11.2008 - 17:08
Вставить ник | Быстрая цитата | Сообщение
#6
|
|
/dev/random Группа: Участник Сообщений: 2216 Регистрация: 5.11.2006 Пользователь №: 16651 |
На Си. %)
Нашел, в общем, где-то описание аналогичного бага, где пользователь жалуется на то, что libmysqlclient при подключении не читает данные из my.cnf, не проверяет почти никакие параметры и использует по умолчанию всегда latin1. А остальное сообщество его уверяет, что так и должно быть. Последняя версия - вбил mysql_options(dbc,MYSQL_SET_CHARSET_NAME,"cp1251"); - вроде пока нормально. |
|
|
Текстовая версия | Сейчас: 19.04.2024 - 09:48 |