Тема: Проблема с кодировкой. Перепробовал всё :(
Использую PDO + PHP версии 5.2.1, MySQL версии 5.0.45-community-nt:
Вот как создаю БД и таблицу:
CREATE DATABASE `out_portal` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
CREATE TABLE `news` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`name` varchar(256) NOT NULL,
`created` varchar(10) NOT NULL,
`title` varchar(256) character set cp1251 NOT NULL,
`msg` text character set cp1251 NOT NULL,
`timestamp` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Код PHP:
$encoding='cp1251';
// ...................................//
Header("Content-type:text/html;charset=windows-1251");
// .................................//
try {
$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=$encoding;";
$dbh = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $encoding"));
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->exec("SET NAMES $encoding");
$dbh->exec("SET CHARACTER SET $encoding");
} catch (PDOException $e) {
echo 'Ошибка доступа к базе данных: '.$e->getMessage().'<br>';
echo 'Проверьте настройки и попытайтесь заново.';
exit;
}
// Как видите все возможные и невозможные варианты решение я перебрал
Мета-тэг тоже присутствует:
<META http-equiv="Content-Type" content="text/html; charset=windows-1251" />
Проблема вроде стандартная, вставляются данные в таблицу, затем идёт корявое отображение русских символов, аля ?????????,
как я понимаю это кодировка cp1252 (она же latin1). Но вот понять почему данные после всех этих шаманств выводятся по прежнему в
latin1 я никак не способен.
P.S.
mysql> show variables like 'char%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | cp1251 |
| character_set_connection | cp1251 |
| character_set_database | cp1251 |
| character_set_filesystem | binary |
| character_set_results | cp1251 |
| character_set_server | cp1251 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
P.P.S.
Причем если загонять данные через phpMyAdmin, то всё работает как надо :-/
=> Решение проблемы есть, но вот каким образом?!