Глюк с кодировкой в MySQL

Перенёс давеча сайт на новый хостинг. Всё прошло без проблем по накатанной схеме: файлы, базы, пароли, права… Всё взлетело. Сижу наслаждаюсь. И вдруг…

Решил я написать статейку. Пару строк написал и, наученный горьким опытом, дай, думаю, сохраню, пока следующую строчку не додумаю. Жму «Сохранить» и — вуаля! Вся выстраданная в муках творчества писанина превратилась в сплошные вопросительные знаки! Как в той песне: "В каждой строчке только точки знаки вопроса после буквы вопросительного знака…" :)

Полез копаться в базу через phpMyAdmin. Везде кодировки стоят правильные. Думал, может создал базы как–то не так? Смотрю параметры создания, касательно кодировок: стоит «Сравнение» вместо нужной кодировки. Ну, это ж не страшно? Оно ж умное? Оно всё правильно сравнит и подберёт нужную кодировку? Как оказалось — нет, нет и ещё раз нет. По крайней мере для моего случая.

И вот, перекапывая в очередной раз phpMyAdmin в поисках проблемы, обнаружил в саааамом низу перечня таблиц интересную строчку — «Итого», так сказать. Там было количество таблиц, количество записей, сколько оно всё места занимает и всё такое. Среди прочего там было написано «latin1_swedish_ci». Что означает кодировку по–умолчанию, не UTF-8 («utf8_general_ci»), как положено, а iso-8859-1 («latin1_swedish_ci»), что приводит к полному отсутствию кириллицы и замене её на знаки вопроса.

Лечится проблема элементарно:

  1. ALTER DATABASE `ваша_база` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Либо через phpMyAdmin: «Операции» > «Сравнения», из выпадающего списка выбрать нужное — utf8_general_ci.

Всё. Теперь вновь созданные записи будут в правильной кодировке.

Комментарии

Комментировать