MySQL Table содержит latin1, но определяется как UTF8, ад кодировки символов

Я "унаследовал" установку osCommerce 2.2, PHP4 и MySQL4, что создает проблемы. Проблема заключается в кодировке символов. В то время как таблицы определены для содержания UTF8 они на самом деле содержат latin1, Чтобы смешать что-то совершенно новое в этом, кажется, что старый кодер вручную изменил это, установив SET CHARACTER SET 'utf8' когда соединение с базой данных установлено.

Теперь это выглядит так:

  • MySQL: UTF8 но на самом деле содержит latin1,
  • PHP: MySQL-Connection вручную устанавливается на UTF8,
  • HTML: поставляется как ISO-8859-1 ака latin1

Эта настройка работала до недели назад, когда провайдер что-то изменил (на самом деле он вообще отрицал, что касался базы данных или чего-то другого, но у них были проблемы с сервером).

Проблемная часть состоит в том, что немецкие специальные символы öäüß отображаются правильно, но в момент, когда вы хотите вставить их в базу данных, все сеансы osCOmmerce прерываются, и только текст, пока этот символ не будет вставлен.

  • Текст для вставки: Das _ä_ ist ein Umlaut
  • Текст, который сохраняется: Das _

В тот момент, когда я изменяю ручное вторжение, устанавливая набор символов в latin1 когда соединение установлено, каждая вставка в порядке, но база данных только доставляет ? вместо специальных символов.

Я понятия не имею, как решить эту проблему, если я изменю столбцы базы данных на latin1 Я теряю все специальные символы, если я изменяю кодировку на соединении, либо отображение, либо вставка не удаются. У меня совершенно нет идей.

2 ответа

Решение

Когда вы меняете данные, которые находятся в другом наборе символов, вы должны сначала изменить их на blob, а затем на целевой набор символов (latin1). Если вы этого не сделаете, MySQL сделает преобразование за вас, и вы этого не сделаете, поскольку у вас уже есть данные в латинице 1?

AFAIK, когда вы используете set chatacter set в соединении (т.е. php), mysql автоматически преобразует все данные в таблице в набор символов соединения.

Не элегантное, но обычно рабочее решение:

  1. выгрузить всю базу данных в файл SQL - проверьте правильность кодировки в текстовом файле,
  2. исправить запросы к таблицам, чтобы создать таблицу UTF-8
  3. проверьте настройки вашей базы данных - используйте UTF-8
  4. снова импортировать всю базу данных
Другие вопросы по тегам