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 автоматически преобразует все данные в таблице в набор символов соединения.
Не элегантное, но обычно рабочее решение:
- выгрузить всю базу данных в файл SQL - проверьте правильность кодировки в текстовом файле,
- исправить запросы к таблицам, чтобы создать таблицу UTF-8
- проверьте настройки вашей базы данных - используйте UTF-8
- снова импортировать всю базу данных