![]() |
|
Модераторы: skyboy |
![]()
|
|
| Modder |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
Проблема очень нестандартная и странная.
При записи данных (а именно строка с кирилицей в 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 большущей помощи! |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
имхо PHP генерит код HTML для юзера , какой чарсет стоит на этой html странице?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Modder |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
Romikgy, все стандарные вопросы с одинаковыми кодировками в базах, файлах, подключении, html и т.д. не актуальны. С этим всё впорядке.
Поэтому и пишу что ошибка необычная. |
|||
|
||||
| AVA12 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 4.5.2008 Репутация: нет Всего: 4 |
Гм, а какая внутренняя кодировка используется в PHP? Какое значение у параметра mbstring.internal_encoding? Где и с каким параметром вызывается (и вызывается ли) mb_internal_encoding()?
50 полей - это уже перебор. В виде полей нужно хранить те данные, которые могут быть использованы для поиска и связей таблиц, а остальные сериализовать и пихать в блоб или текст. |
|||
|
||||
| Modder |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
AVA12,
внутренняя кодировка в PHP естественно UTF-8. mb_internal_encoding('UTF-8') вызывается вначале PHP скрипта. |
|||
|
||||
| Modder |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
Решено! Проблема была в чрезмерной экономии хостинг провайдера. А именно в мизерных настройках MySQL.
Их можно отобразить SQL командой:
Во-первых, кодировка по умолчанию на хостинге стоит cp1251, которую нельзя поменять. Во-вторых, параметр wait_timeout был равен 15! Это значит, что если между SQL запросами больше 15 секунд, то текущее MySQL соединение закрывается, а когда делаешь следующий запрос, соединение создаётся снова, но уже с кодировкой по умолчанию! Это решается либо просьбой хостера поднять этот параметр до вменяемого значения, либо можно сделать это самому командой:
P.S. Ох уж эти хостинги... Это сообщение отредактировал(а) Modder - 30.8.2014, 00:26 |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |