2009-05-07 2 views
2

Heres моя проблема. У меня есть таблица mysql, называемая кавычками. В одной из строк, цитата содержит символы folloqingОшибка кодирования PHP MySQL?

‘ and ’ 

Теперь строка сортировки utf8__unicode__ci

При использовании в MySQL Query Browser и PHPMyAdmin для retrive строки кавычки выходят, как предполагалось. Как всегда, когда я retrive их из базы данных с помощью PHP и отображать их на экране они выходят как коробки

� and � 

Моего HTML страница имеет UTF-8 кодировку, и все параметры кодирования UTF-8 установлены в PHP :

/* Set UTF-8 settings */ 
mb_internal_encoding('UTF-8'); 
mb_regex_encoding('UTF-8'); 
mb_http_output('UTF-8'); 

/* Set ICONV ini settings */ 
ini_set('iconv.input_encoding', 'UTF-8'); 
ini_set('iconv.output_encoding', 'UTF-8'); 
ini_set('iconv.internal_encoding', 'UTF-8'); 

/* Set ICONV function settings */ 
iconv_set_encoding('input_encoding', 'UTF-8'); 
iconv_set_encoding('output_encoding', 'UTF-8'); 
iconv_set_encoding('internal_encoding', 'UTF-8'); 

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

ответ

5

Возможно, вам потребуется установить UTF-8 в качестве выбранной кодировки для вашего соединения с MySQL. Если вы используете Mysqli драйвер PHP это означает что-то вроде этого:

$mysqli = new mysqli("localhost", "my_user", "my_password", "test"); 
$mysqli->set_charset("utf8"); 
+0

запрос SET NAMES 'utf8' – Petrunov

+0

Я думаю, что это SET CHARACTER SET, который делает это для него, на самом деле. SET NAMES - это идентификаторы таблицы/столбца/etc. – chaos

1

Ваша сортировка не помогает; это просто определение порядка сортировки. Вам нужно набор символов по умолчанию быть UTF-8, как в:

CREATE TABLE `foo` (
    `id` int not null auto_increment, 
    `name` varchar(50) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

Вы должны быть в состоянии решить эту проблему с:

ALTER TABLE `foo` DEFAULT CHARSET=utf8 

Только Гоча, что иногда ваши индексы будут слишком долго, если они находятся в utf-8.

+0

@chaos я просто попытался это. он все еще не работает. Его как-то связано с PHP, так как MySQL Query Browser и PHPMyAdmin показывают правильные цитаты. –

+0

Erm ... какова ваша кодировка HTML-кода? Просмотр> Кодировка символов в Firefox. – chaos

+0

Когда вы показываете свой контент базы данных через свой собственный PHP, я имею в виду; это, безусловно, utf-8 в PHPMyAdmin. – chaos

4

@Joakim, спасибо так много для установки меня в правильном направлении. Я не мог использовать ваш точный код, потому что im использует собственный драйвер базы данных, и он работает с использованием старых команд mysql, а не класса mysqli. Я попытался использовать mysql_set_charset(), но моя версия php не поддерживала его (по-прежнему php 5 tho).

это решение я использовал:

mysql_query("SET CHARACTER SET utf8", $this->connection); 
mysql_query("SET NAMES utf8", $this->connection); 
Смежные вопросы