Я работаю с данными из старой базы данных mysql. В этой базе данных есть таблица со строковым столбцом с кодировкой «cp1252 западноевропейский (latin1)» (такой же, как Windows-1252). При запросе данных из командной строки mysql данные из этого поля представлены в виде:
Obama’s 
Это должно читать
 Obama's 
Я пробовал следовать принятому ответу « Как конвертировать весь набор символов базы данных MySQL и сопоставление с UTF-8? для преобразования поля в UTF-8 в MySQL, но это не имеет значения.
  Я также попытался вставить новую строку в эту таблицу, используя Obama's качестве текста для этого поля (опять же из командной строки mysql).  Однако этот текст правильно представлен, когда я затем запрашиваю ту же строку, которую я только что вставил.  Я попытался выполнить эту вставку, когда поле было установлено на latin1 и когда оно было установлено в UTF-8.  Тот же результат. 
Это заставляет меня думать, что когда плохие данные были вставлены в базу данных, это было сначала неправильно закодировано PHP. Здесь он становится нечетким для меня.
  Я могу предположить, что данные были вставлены через веб-форму и обработаны с помощью PHP.  Что сделал PHP с ним, прежде чем вставлять его в базу данных?  Преобразовал ли он строку в UTF-8, которая, согласно таблице на этой полезной странице , использует три байта %E2 %80 %99 для представления символа.  У меня есть это право? 
Если это правильно, каковы мои варианты восстановления этих данных? Я хотел бы преобразовать таблицу и ее поля в кодировки UTF-8, но это, похоже, не исправляет текст. Должен ли я писать сценарий, который вручную изменяет эти символы, какими они должны быть?
 select convert(binary convert(field_name using latin1) using utf8) from table_name 
Если это отобразится правильно, вы можете выполнить обновление.