Ошибка кодировки PHP MySQL? - PullRequest
2 голосов
/ 07 мая 2009

Вот моя проблема. У меня есть таблица MySQL под названием кавычки. В одной из строк цитата содержит следующие символы

‘ and ’

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

При использовании MySQL Query Browser и PHPMyAdmin для извлечения строк кавычки получаются, как и предполагалось. Однако когда я извлекаю их из базы данных с помощью 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 может кто-нибудь пролить свет на это, пожалуйста.

Ответы [ 3 ]

5 голосов
/ 07 мая 2009

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

$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->set_charset("utf8");
4 голосов
/ 07 мая 2009

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

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

mysql_query("SET CHARACTER SET utf8", $this->connection);
mysql_query("SET NAMES utf8", $this->connection);
1 голос
/ 07 мая 2009

Ваше сопоставление не помогает вам; это просто определяет порядок сортировки. Вам нужно, чтобы набор символов по умолчанию был 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...