Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задать кодировку по умолчанию для PDO, MySQL 5, PDO, UTF-8 - знаки вопроса 
:(
    Опции темы
Sardar
Дата 8.2.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Использую PDO что бы отойти от базы, т.к. часто конечный результат переносится на SQLite3.
Есть MySQL5 база, дамп:

Код
-- результат mysqldump

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

....

CREATE TABLE `ps_diploma` (
...
) ENGINE=MyISAM ... DEFAULT CHARSET=utf8;

...


В конфигах
Код

default-character-set=utf8

# нашёл эту опцию, но если раскоментирую, то сервер не запускается, ошибок никуда (даже в логи) не пишет
# character-set-results=utf8


Подключение:
Код
$db = new PDO('mysql:host=localhost;dbname=12345', '12345', '12345');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


Текст выводится вопросами, и через PDO и через mysqli. Не нашёл как задать кодировку utf8 для PDO.  $db->query("SET NAMES utf8"); решает проблему, но это дико, т.к. запрос MySQL специфичный, зачем мне тогда PDO?

Консольным клиентом просматриваю базу (tee в файл), текст приходит правильно в UTF-8. То же самое если просматривать query viewer'ом или в ZendStudio. Вывод: в базе не вопросы, а нормальный текст в utf8.

Вопрос: как сказать PDO/mysql клиенту, что текст из базы приходит в utf8 и конвертировать его не нужно? Лучше это сделать в настройках базы (как? где?), т.к. указывать кодировку в коде - есть бред.
Да, текст вывожу через echo и var_dump. В браузере кодировка указана верно, в сорцах знаки вопроса. WinXP SP2 NL/ Firefox 2.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
FractalizeR
Дата 8.2.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Можно использовать атрибут PDO::MYSQL_ATTR_INIT_COMMAND при соединении с базой и в него передавать SET NAMES.
Напрямую изменить кодировку соединения в PDO нельзя.


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
GeneralElectric
Дата 10.2.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 2
Всего: 16



Sardar, а остальные запросы в приложении переносимы между разными БД? Только SET NAMES специфичный для MySQL?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.