это ваш терминал оказался в латинице 1, а не в данных:)
Есть ли способ настроить БД так, чтобы она действительно использовала utf-8
вы уже настроили его.
единственное, что вам нужно, это настроить клиентскую кодировку, которая выполняется SET NAMES 'utf8'
фактически, используя SET NAMES, вы можете сделать так, чтобы ваши данные отображались в любой кодировке, которую вы установили. это единственная цель волшебного слова SET NAMES.
если у вас есть проблемы с кодировкой, не охваченные в этом вопросе,
что я могу сделать с данными, уже находящимися в БД?
все, что вы пожелаете, пока ваш БД не возвращает ?
отметок.
чтобы восстановить ваши данные, вы должны установить имена для кодировки данных, заданной для таблицы. это предотвратит перекодировку данных в mysql. Таким образом, вы можете получить или сбросить его, а затем загрузить его снова с правильными настройками.
EDIT
после некоторого рассмотрения я собираюсь сказать, что ваши данные находятся в utf8, в то время как кодировка таблицы как-то установлена на latin1.
% C3% A9 - это совершенно правильное представление utf-8 символа é. (не знаю, где вы получили трейлинг f
хотя)
, в то время как% C3% 83% C2% A9 - это кодированная в UTF-версии версия% C3% A9. Итак, кажется, ваша база данных думает, что ваши данные находятся в латинице 1 и кодируют их в utf8.
так что, когда вы устанавливаете имена на latin1, это не возражает и не перекодирует.
Вывод:
дважды проверьте кодировку вашей таблицы (и полей). это должен быть латиница 1
да, чтобы сохранить ваши данные, вы должны сделать что-то вроде
*** Боже, я ненавижу эту проблему автоформатирования, которая не позволяет мне публиковать код сразу после элемента списка
mysqldump --default_charset=latin1 mydb > mydb.sql
Затем проверьте этот дамп и измените каждый вид latin1 на utf8.
затем загрузите его обратно.
не забудьте сначала сделать резервную копию ваших данных!