Задавайте вопросы, мы ответим
Вы не зашли.
русские буквы из базы на сайте выводятся вопросиками "???"
при этом если в скрипте при подключении к БД задать
$dbh->do( "set names cp1251" );
или
в my.cnf прописать
[mysqld]
init-connect="SET NAMES cp1251"
то русский отображается корректно.
в my.cnf прописаны
[client]
default-character-set=cp1251
[mysqld]
character-set-server=cp1251
также
mysql> show variables like 'chara%';
+--------------------------+----------------------------------+
| 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/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
база соответсвенно в cp1251. проблема возникла при переносе на другой сервер.
куда смотреть, что проверить, в чем может быть дело?
Неактивен
версия сервера точно та же, что и на исходном сервере. проблема, как я понимаю в кодировке клиента, так как при принудительном определение кодировки средствами
dmtr написал:
при этом если в скрипте при подключении к БД задать
$dbh->do( "set names cp1251" );
или
в my.cnf прописать[mysqld]
init-connect="SET NAMES cp1251"то русский отображается корректно.
русский на сайте выводится корректно
собственно и у таблцы кодировка соответсвует дефолтной
mysql> SHOW CREATE TABLE promo\G
*************************** 1. row ***************************
Table: promo
Create Table: CREATE TABLE `promo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL DEFAULT '0',
`isgroup` int(4) NOT NULL DEFAULT '0',
`time_create` datetime DEFAULT NULL,
`sort` int(4) DEFAULT '0',
`photo` varchar(255) DEFAULT NULL,
`photo2` varchar(250) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
`file` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`fl_hidden` int(4) DEFAULT NULL,
`descr` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=34 DEFAULT CHARSET=cp1251
1 row in set (0.01 sec)
клиент по-дефолту почему-то ждет данные не в той кодировке в которой отдает их сервер? как это проверить?
Неактивен
Проблема в том, что данные находятся не в cp1251 как думает сервер и если вы просите их в cp1251, то есть сервер отдает их без перекодировки, то всё в порядке. А если вы указываете любую другую кодировку, то возникает проблема.
Чтобы убедиться попробуйте указать
$dbh->do( "set names utf8" );
Неактивен
А в чем, собственно, проблема то?
Выполнять SET NAMES после подключения — это правильно, и это единственный
способ указать серверу, в какой кодировке Вы хотите получать данные.
Неактивен
vasya написал:
Проблема в том, что данные находятся не в cp1251 как думает сервер и если вы просите их в cp1251, то есть сервер отдает их без перекодировки, то всё в порядке. А если вы указываете любую другую кодировку, то возникает проблема.
я не понимаю. на что тогда влияет параметр
[client]
default-character-set=cp1251
разве он не определят кодировку в которой клиент будет получать данные? зачем тогда без "set names" сервер их перекодирует?
Отредактированно dmtr (25.01.2012 17:14:04)
Неактивен
Представьте, что к Вам подошел незнакомый человек. На каком языке
Вы будете с ним общаться? Нет, Вы не угадали, он китаец.
Так же и с MySQL — «удадать» невозможно. Можно сказать «я — китаец».
И тогда будет понятно, как общаться.
Неактивен