Перейти к содержимому

  • Войти / Регистрация

Фото

Проблемы с кодировкой в базе данных

MySQL кодировка

  • Чтобы отвечать, сперва войдите на форум
3 ответов в теме

#1 Ushwood

Опубликовано 27 Ноябрь 2022 - 18:50  

Ushwood

    Moderator

  • Модератор
  • 6 570
  • Сообщений: 13 436

Камрады, у меня случилась проблема с моим сайтом ushwood.ru. В один непрекрасный день его содержимое вдруг стало отображаться крякозябрами. Т.е. слетела кодировка.
Это произошло безо всяких действий с моей стороны, стараниями хостера.
Вот что написала их техподдержка:

25.11.2022 на сервере были произведены работы по замене кодировки для сервера базы данных на utf-8 так как практически все клиенты используют данную кодировку для работы.
Скорее всего именно данные изменения и повлияли на работу Вашего сайта, так как у Вас в базе данных присутствуют таблицы в кодировке utf8_general_ci но некоторые в latin1_swedish_ci, что не совсем обычно для CMS WordPress.

После чего они самоустранились, дескать, с вашими базами мы трахаться не компетентны, обратитесь к их разработчику.

Вот так выглядит моя база в phpMyAdmin:
image.jpg

При этом, правда, когда я делаю запрос SHOW VARIABLES LIKE "character\_set\_database"; мне выдается, что кодировка utf8 (как на всей базе, так и на любой табличке оп отдельности).
image.jpg

Ну, шведская кодировка - это дремучий форум, который я когда-то давно поставил. Он все равно мертв, его снести не жалко. А вот что делать с остальным?

В инете есть куча советов, как сменить кодировку базы данных. Вот, например, здесь сказано, какие должны быть sql-запросы. Я сделал в точности по их рецепту:

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'ushwoodru'
ORDER BY 1

(ну и все последующие шаги, перечисленные по той ссылке)
Никакого эффекта, за исключением того, что в поле COLLATE против таблиц wp_forum тоже появилось "utf8_general_ci"

По этой ссылке советуют, как изменить кодировку на локальном компе - скачать базу, открыть в Notepad++ и перекодировать "в UTF-8/без BOM."
Скачал, открыл, преобразовал - вообще без видимого эффекта.

Что дальше-то делать?

(К сожалению, в теме MySQL я полный чайник, понимаю только инструкции типа "нажать сюда, скопипастить туда")

ЗЫ. Записи в PMA выглядят сейчас вот так:
image.jpg

В Notepad++ точно так же...

 


  • 0

#2 Quib

Опубликовано 01 Декабрь 2022 - 01:48  

Quib

    Мастер форумных баталий

  • Завсегдатай
  • ФишкаФишкаФишкаФишкаФишкаФишка
  • 2 667
  • Сообщений: 9 285

Решение проблемы очевидное.

1. Послать нафиг такого хостера, который ломает обновлениями сайт.

2. Развернуть бекап у другого хостера. Бекап ведь есть, да?

 

А вообще, тупо перекодировать sql базу в Notepad++ должно было быть достаточно, и залить ее заново. Еще можно посмотреть локаль, которая установлена на хостинге, если там доступна такая функция, и в каком-нибудь config.php самого WordPress.

 

Еще, почему у сайта нет SSL сертификата? Это прошлый век.


  • 0

#3 Ytzin

Опубликовано 01 Декабрь 2022 - 04:00  

Ytzin

    Заслуженный ветеран

  • Завсегдатай
  • ФишкаФишкаФишкаФишка
  • 470
  • Сообщений: 3 216

Подозреваю что нужен альтер на уровне бд. Что-то типа:

ALTER DATABASE имя бд CHARACTER SET utf8 COLLATE utf8_general_ci;


  • 0

#4 Ushwood

Опубликовано 04 Декабрь 2022 - 20:05  

Ushwood

    Moderator

  • Модератор
  • 6 570
  • Сообщений: 13 436

1. Послать нафиг такого хостера, который ломает обновлениями сайт.

Это в планах.

 


2. Развернуть бекап у другого хостера. Бекап ведь есть, да?

А вот тут засада. Бэкапы есть, но они все такие. БД изначально была не в utf8 (по историческим причинам).

 


Подозреваю что нужен альтер на уровне бд. Что-то типа:

ALTER DATABASE имя бд CHARACTER SET utf8 COLLATE utf8_general_ci;

Это было первое, что я сделал, но оно ничего не изменило.

 

Короче, единственное (по-видимому) решение - ручками перекодировать базу в utf8.

Но простая реализация типа написанного выше или "открыть в Notepad++ и перекодировать" - не катит.

 

Прокатила подсказка, которую мне дали на другом форуме: я открыл базу в программе "Штирлиц 4", в ней перекодировал в utf8, потом уже открыл в Notepad++ и через Ctrl+H позаменял символы, с которыми Штирлиц не справился.

Загнал эту базу на сайт, и он в целом ожил. Правда, оказалось, что некоторые слова все равно отображаются некорректно, и сейчас я занимаюсь тем, что их отлавливаю.


Изменено: Ushwood, 04 Декабрь 2022 - 20:35

  • 0




Привет!

Насколько мы поняли, вы используете блокировщик рекламы в вашем браузере. Скорее всего, это AdBlock или AdBlock Plus.

Учитывая, сколько агрессивной рекламы можно встретить на различных сайтах, это, возможно, и оправданно.

Однако Riot Pixels — пока ещё небольшой сайт, мы существуем в основном на деньги, получаемые от различных рекламодателей. Пользователей же с установленным AB/ABP на Riot Pixels сейчас — более 30%. Это очень много.

У блокировщиков рекламы есть еще одно плохое свойство — у вас может «поехать» дизайн или перестанут показываться скриншоты.

Мы не хотим предпринимать активных действий в отношении блокировщиков рекламы (например, закрывать контент) — это не по-человечески. Однако и безучастно смотреть никак не можем. Поэтому у нас к вам большая просьба — пожалуйста, внесите Riot Pixels в «белый список» вашего блокировщика. Это поможет нам и дальше жить и развиваться, а вам ничего не будет стоить.

Спасибо!
Команда Riot Pixels.