Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мистическая ошибка с кодировкой при записи. Прошу гуру помощи. / 12 сообщений из 12, страница 1 из 1
24.08.2014, 01:08:48
    #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
24.08.2014, 18:49:31
    #38727592
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
Modder_2. Почему-то проблема появляется в таблицах, к которым давно (где-то сутки или пол суток) не производился запрос на запись. После этой первой ошибочной записи, все последующие запросы проходят без проблем.И в эти сутки запросы на чтение отдают данные правильно. Первый запрос на запись заносит в базу крякозябрики, а второй и последующие уже нормальные данные.
Верно понимаю?

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

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

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

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

А вот всё остальное не слишком стройно вписывается в эту теорию. Однако, могу предположить, что либо где-то в приложении кодировка устанавливается заново, либо открывается и инициализируется другое соединение после какого-то события/сбоя.
...
Рейтинг: 0 / 0
30.08.2014, 01:31:01
    #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
30.08.2014, 01:34:34
    #38733228
Modder_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
vkle,
Где же Вы раньше были?) Ваши предположения абсолютно верны! Но мы уже сами решили, хотя пришли к этому не быстро.
...
Рейтинг: 0 / 0
30.08.2014, 08:06:00
    #38733251
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистическая ошибка с кодировкой при записи. Прошу гуру помощи.
Modder_,

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


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


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