2012-02-27 2 views
3

Я знаю, что определение этого вопроса может показаться слишком неспецифическим, поэтому я попытаюсь предоставить все связанные данные.Проблемы с кодированием (и основы) с MySQL

В этом случае я действую как хостер. У нас есть PHP-страница, работающая с MySQL. Кто-то сделал некоторую операцию над экземпляром MySQL, что вызвало проблемы с визуализацией проблемных символов (-, акценты и т. Д.) (И это все, это мистерия).

Я проверил множество вариантов, но я думаю, что моя нехватка знаний делает меня слепой. Я знаю, что это распространено, поэтому, возможно, мы сможем создать какой-то «контрольный список».

Если я типа 'статус' на экземпляре MySQL я получаю:

Server version:   5.5.15 MySQL Community Server (GPL) 
Protocol version:  10 
Connection:    localhost via TCP/IP 
Server characterset: utf8 
Db  characterset: utf8 
Client characterset: utf8 
Conn. characterset: utf8 
TCP port:    3306 

Все в UTF8 ... здорово !. Если я связываю с HeidiSQL и проверить переменные я получаю:

character_set_client  utf8 
character_set_connection utf8 
character_set_database utf8 
collation_collection  utf8_general_ci 
collation_database  utf8_general_ci 

И т.д. и т.п. Тем не менее, и, к сожалению, посетив страницу возвращает странные символы как. Кодировка содержимого в тегах META также является UTF-8.

Я знаю, что некоторые модификации могут быть выполнены в коде, чтобы заставить соединение возникнуть в некоторых кодировках. Но, кроме того, самое невероятное, что страница работает.

Кто-нибудь знает, что изменилось на сервере, чтобы вызвать такое поведение?

Большое спасибо, как всегда!

PS: Мы особенно заинтересованы в аспектах, связанных с конфигурациями серверов. Изменить исходный код клиента - это то, чего мы хотим избежать.

+0

Так оно работало раньше, но перестало работать сейчас? Я не уверен, что понимаю. –

+0

Да, мы считаем, что это из-за операции, которую кто-то сделал ... Поэтому мы хотели бы знать, какие обновления в конфигурации могут привести к этому. Спасибо Pekka :) – IoChaos

ответ

2

Что относительно заголовка HTTP? Если в заголовке указано определение кодировки символов, то мета-определение не будет применяться.

+0

Как узнать больше о заголовке HTTP ?. Используя HTTP-инспекторов, я вижу UTF8 в качестве принятой кодировки и возвращен, но не более того. – IoChaos

+0

В заголовке ответа вы должны увидеть Content-Type: [...], если он есть. –

+0

Появляется: Content-Type \t текст/html; charset = utf-8 – IoChaos

2

Если ваш код вводит данные в MySQL без установки кодировки в UTF, что, вероятно, приведет к вашим проблемам:

После подключения к БД и таблицы БД, выполните команду:

mysql_set_charset ('utf-8'); 

связи по умолчанию charset между PHP и MySQL все еще не UTF-8.

+1

'Шрифт обмена сообщениями по умолчанию между PHP и MySQL по-прежнему не является UTF-8.' Я не уверен, что это правда, если он был вынужден UTF-8 в конфигурации mySQL? –

+1

Спасибо fred2. Дело в том, что я знаю, что поведение вызвано некоторой модификацией на сервере. Измените код клиента приложения - это то, чего мы хотим избежать. – IoChaos

+1

Можете ли вы прояснить пару вещей для меня? Как произошла «операция над экземпляром mysql».Например, было ли это сделано непосредственно из командной строки в mysql или через импорт из файла дампа mysql, через phpMyAdmin или через другого клиента? Являются ли данные, которые отображают поврежденные символьные данные, которые находились в базе данных до этой операции (в этом случае это случай, когда сервер отображает неправильную кодировку), или данные, которые были введены BY или AFTER после операции (в этом случае данные в база данных находится в неправильной кодировке, и не уверен, что есть способ ее исправить)? – fred2