Перенёс давеча сайт на новый хостинг. Всё прошло без проблем по накатанной схеме: файлы, базы, пароли, права… Всё взлетело. Сижу наслаждаюсь. И вдруг…
Решил я написать статейку. Пару строк написал и, наученный горьким опытом, дай, думаю, сохраню, пока следующую строчку не додумаю. Жму «Сохранить» и — вуаля! Вся выстраданная в муках творчества писанина превратилась в сплошные вопросительные знаки! Как в той песне: "В каждой строчке только точки знаки вопроса после буквы вопросительного знака…" :)
Полез копаться в базу через phpMyAdmin. Везде кодировки стоят правильные. Думал, может создал базы как–то не так? Смотрю параметры создания, касательно кодировок: стоит «Сравнение» вместо нужной кодировки. Ну, это ж не страшно? Оно ж умное? Оно всё правильно сравнит и подберёт нужную кодировку? Как оказалось — нет, нет и ещё раз нет. По крайней мере для моего случая.
И вот, перекапывая в очередной раз phpMyAdmin в поисках проблемы, обнаружил в саааамом низу перечня таблиц интересную строчку — «Итого», так сказать. Там было количество таблиц, количество записей, сколько оно всё места занимает и всё такое. Среди прочего там было написано «latin1_swedish_ci». Что означает кодировку по–умолчанию, не UTF-8 («utf8_general_ci»), как положено, а iso-8859-1 («latin1_swedish_ci»), что приводит к полному отсутствию кириллицы и замене её на знаки вопроса.
Лечится проблема элементарно:
- ALTER DATABASE `ваша_база` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
Либо через phpMyAdmin: «Операции» > «Сравнения», из выпадающего списка выбрать нужное — utf8_general_ci.
Всё. Теперь вновь созданные записи будут в правильной кодировке.