powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
12 сообщений из 12, страница 1 из 1
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38727378
Modder_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема очень нестандартная и странная.

При записи данных (а именно строка с кирилицей в UTF-8 ) в БД (таблица InnoDB utf8_general_ci ) иногда(!) русские буквы записываются вот такими кракозябрами Александр .
Записываемые исходные данные нормальные в UTF-8 .
Язык PHP .

Кодировки везде установлены правильные. mysql_set_charset() использую. SET NAMES 'utf-8' тоже пробовал. Но это всё не то. Потому как проблема возникает иногда!

Какие особенности появления этой ситуации я заметил?
1. Если только что коряво записанные данные сразу же считать из БД и вывести на экран, то они нормальные! Т.е. в том же PHP скрипте при том же подключении к БД.
2. Почему-то проблема появляется в таблицах, к которым давно (где-то сутки или пол суток) не производился запрос на запись. После этой первой ошибочной записи, все последующие запросы проходят без проблем.
3. Проблема замечена только в двух таблицах из всех. Таблицы не маленькие по полям. В одной 50 столбцов, в другой - 100. Записей в них не много. Данные - обычные тексты ( VARCHAR , CHAR ) да числа ( INT , MEDIUMINT , TINYINT ), пару ENUM , и по-одному TIME и DATE .

Прошу специалистов MySQL большущей помощи!
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38727592
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Modder_2. Почему-то проблема появляется в таблицах, к которым давно (где-то сутки или пол суток) не производился запрос на запись. После этой первой ошибочной записи, все последующие запросы проходят без проблем.И в эти сутки запросы на чтение отдают данные правильно. Первый запрос на запись заносит в базу крякозябрики, а второй и последующие уже нормальные данные.
Верно понимаю?

Modder_3. Проблема замечена только в двух таблицах из всех.Пересоздать их заново не пробовали?
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38727666
Modder_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleИ в эти сутки запросы на чтение отдают данные правильно. Первый запрос на запись заносит в базу крякозябрики, а второй и последующие уже нормальные данные.
Верно понимаю?Да, всё верно.

vkleПересоздать их заново не пробовали?Нет. Не думаю, что это поможет.
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38728084
Itee_01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может в конфигах где глюк?
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38728091
Modder_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Itee_01Может в конфигах где глюк?
Скорее всего. Но где и в каких именно?)
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38729443
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр.

Было записанно в базу Александр.
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38733220
Modder_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453Александр.

Было записанно в базу Александр.
Да, всё верно)
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38733225
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть одно предположение, только оно не кажется мне совершенно логичным. И тут надо еще смотреть в деталях, как именно реализована работа с СУБД.
Предположу, что MySQL-сервер в какой-то момент закрывает подключение. Например, по таймауту при бездействии. PHP об этом не знает и пытается отправить запрос на сервер. Возникает ошибка, которая обрабатывается внутри самого PHP - требуемое соединение с сервером устанавливается вновь. Однако, после такого восстановления соединение не инициализируется (имею в виду, что PHP сам сделает только коннект, но запрос SET NAMES не будет отправлен). Обнаруживается отслеживанием через mysql_thread_id(). В принципе, это объясняет
Modder_Если только что коряво записанные данные сразу же считать из БД и вывести на экран, то они нормальные!

А вот всё остальное не слишком стройно вписывается в эту теорию. Однако, могу предположить, что либо где-то в приложении кодировка устанавливается заново, либо открывается и инициализируется другое соединение после какого-то события/сбоя.
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38733226
Modder_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решено! Проблема была в чрезмерной экономии хостинг провайдера. А именно в мизерных настройках MySQL.
Их можно отобразить SQL командой:
Код: sql
1.
SHOW VARIABLES


Во-первых, кодировка по умолчанию на хостинге стоит cp1251 , которую нельзя поменять.

Во-вторых, параметр wait_timeout был равен 15 ! Это значит, что если между SQL запросами больше 15 секунд, то текущее MySQL соединение закрывается, а когда делаешь следующий запрос, соединение создаётся снова, но уже с кодировкой по умолчанию!

Это решается либо просьбой хостера поднять этот параметр до вменяемого значения, либо можно сделать это самому командой:
Код: sql
1.
SET wait_timeout = 28800


P.S. Ох уж эти хостинги...
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38733228
Modder_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
Где же Вы раньше были?) Ваши предположения абсолютно верны! Но мы уже сами решили, хотя пришли к этому не быстро.
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38733251
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Modder_,

Где-где... Да тут же, на форуме и был. Лет шесть назад была у меня проблема http://www.sql.ru/forum/552196/teryaetsya-kodirovka-na-hodu Только никакая взаимосвязь поначалу не нарисовалась. Когда отбросил положения 2 и 3 из первого поста, предположив, что они чем-то другим вызваны... Кстати, проблему тоже очень долго искал в тот раз - поначалу она проявлялась только на пиках нагрузки на сервер. Видимо, основная часть скриптов с лихвой укладывается эти секунды, что дает ощущение нормальной работы сервера в целом.
...
Рейтинг: 0 / 0
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
    #38733313
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleНапример, по таймауту при бездействии. PHP об этом не знает и пытается отправить запрос на сервер. Возникает ошибка, которая обрабатывается внутри самого PHP - требуемое соединение с сервером устанавливается вновь. Однако, после такого восстановления соединение не инициализируется (имею в виду, что PHP сам сделает только коннект, но запрос SET NAMES не будет отправлен). Обнаруживается отслеживанием через mysql_thread_id(). В принципе, это объясняет


Если не ошибаюсь, делает это интерфейс php mysqli, а классический mysql ничего такого не делает и скрипты пишут "держа в уме" это поведение. Обычные скрипты просто валят ошибки и перестают работать при потере соединения.
Но ведь и SET NAMES не рекомендуется использовать с mysqli. Там есть свой отдельный вызов.
Как ведет себя сайт, если кодировку клиента выбирать как рекомендуется ?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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