Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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