2010-06-23 2 views
1

Недавно я преобразовал старую базу данных MySQL, хранящуюся как latin1_swedish_ci, в utf8_general_ci. Теперь у меня есть заголовок HTTP, определяющий UTF-8, HTML-тег на странице, а данные в базе данных правильно кодируются как utf8_general_ci.Проблема кодирования символов между различными версиями PHP, Apache и MySQL

Все это отлично работает на моем тестовом сервере, поэтому я загружаю обновленные HTML-файлы и скрипты PHP в промежуточную область на реальном сервере. Затем я заменю старую промежуточную базу данных на экспорт из тестовой базы данных.

И теперь на месте размещения есть юникодные сущности, а не каждый апостроф.

Такая же база данных, такой же код, но там не работает.

Разница между тестовым сервером и промежуточной области является то, что тестовый сервер является следующее:

Тест:

  • Apache 2.2.15
  • РНР 5.3.2
  • MySQL 5.1

Проведение: (Да, это ужасно устарело, но это из-под контроля)

  • Apache 1.3.37
  • PHP 5.2.3
  • MySQL 4.1.15

Любая идея, что является причиной его не работу на промежуточном сервере?

+0

Как вы выполнили экспорт из тестовой базы данных в промежуточную базу данных? туздЫшпр? PhpMyAdmin? – Charles

+0

'latin1_swedish_ci' и' utf8_general_ci' не являются символьными кодировками, они являются сопоставлениями - они контролируют, как сортировка выполняется в БД. ref: http://dev.mysql.com/doc/refman/5.5/en/charset.html –

+0

@Charles: PHPMyAdmin – Macha

ответ

2

Здесь очень важно кодирование соединения. Убедитесь, что вы используете одну и ту же кодировку на обоих серверах. Например, выполнив эту в качестве первой команды при подключении:

SET NAMES 'utf8'; 
+0

Это решило это. Я должен был добавить его в свой код настройки БД в PHP-скрипте. Почему это необходимо на одном сервере, а не на другом? – Macha

+0

Два сервера, возможно, имеют разные кодировки по умолчанию. На одном сервере вы автоматически получаете правильную кодировку соединения, с другой - неправильная кодировка. Всегда лучше устанавливать его вручную каждый раз, чтобы быть в безопасности. –

0

Убедитесь, что установлен на my.cnf каждой машины вы используете MySQL на следующее:

[client] 
default-character-set=utf8 

...

[mysqld] 
default-character-set=utf8 
Смежные вопросы