Проблеми з кодуванням в MySQL
phpMyAdmin: вопросики в базі MySQL
Чи не відображається російську мову в MySQL
Розглянемо ситуацію, коли вам потрібно відновити сайт з дампа MySQL.
Ваш сайт на національній мові і, припустимо, ви не знаєте в якому кодуванні був збережений дамп.
З кодуванням дампа розібралися, заодно відкрили його і перевірили, що в тексті видно російський, і можна продовжувати.
Якщо в дампі тільки вопросики і російського там не видно, то продовжувати немає сенсу - дамп битий. І потрібно зробити ще один, можливо, з іншими настройками в phpMyAdmin.
Після створення бази MySQL (див. Демо ролик, як створити базу MySQL) переходимо в phpMyAdmin, вкладка «Операції» (цифра 1 на зображенні) і насамперед міняємо дефольтную кодування бази latin1_swedish (цифра 2) на відповідну нам. Наприклад, на російську - cp1251_general_cs.
Отримуємо підтвердження, що «MySQL запит був виконаний», бажаючі можуть виконати це за допомогою запиту ALERT DATABASE (його видно на екрані) і переходимо до наступного етапу - вкладці «Імпорт» (3).
Але перш ніж імпортувати файл з дампом в MySQL нам потрібно пояснити базі, якою мовою з ним працювати. Тому ми вибираємо (4) cp1251 (це Кирилиця) і тільки після цього переходимо безпосередньо до імпорту (5).
Якщо все в порядку і не відбувся, наприклад, обрив зв'язку або ваш дамп не містить забороненої до використання в MySQL послідовності символів, то ми отримуємо чергове підтвердження, що «Імпорт успішно завершений» і тепер в нашій базі є російська.
При цьому вас не повинно бентежити, якщо після завершення операції в phpMyAdmin'е в віконці з'явиться інша кодування. Вона не має відношення до справи, тому що вона з'являється після.
Існує правда ще одна причина, по якій, навіть якщо у вас в базі є російська, то на сайті ви все одно отримаєте вопросики: Потрібно пояснити коду php що в БД російський.
Для цього знайдіть, де в вашому коді де відбувається підключення до БД і перед коннектом додайте рядок mysql_query ( 'SET NAMES cp1251');
Ну, або mysql_query ( "SET NAMES utf8 COLATE utf8_general_ci"); якщо ви збираєтеся використовувати UTF-8. У цьому випадку на всіх попередніх етапах ви теж повинні були вказати UTF-8.
Якщо результат конекту до БД записується в змінну, наприклад, $ result, то перед самим коннектом в цю ж змінну запишіть:
$ Result = mysql_query ( 'SET NAMES cp1251');
Якщо ви ніде не помилилися і нічого не пропустили, то тепер все повинно працювати правильно і питаннячко на вашому сайті більше не буде.