SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.01.2012 12:49:29

dmtr
Участник
Зарегистрирован: 18.01.2012
Сообщений: 9

кодировка

русские буквы из базы на сайте выводятся вопросиками "???"
при этом если в скрипте при подключении к БД задать

$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. проблема возникла при переносе на другой сервер.
куда смотреть, что проверить, в чем может быть дело?

Неактивен

 

#2 25.01.2012 12:55:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Неактивен

 

#3 25.01.2012 15:47:20

dmtr
Участник
Зарегистрирован: 18.01.2012
Сообщений: 9

Re: кодировка

версия сервера точно та же, что и на исходном сервере. проблема, как я понимаю в кодировке клиента, так как при принудительном определение кодировки средствами

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)

клиент по-дефолту почему-то ждет данные не в той кодировке в которой отдает их сервер? как это проверить?

Неактивен

 

#4 25.01.2012 16:08:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: кодировка

Проблема в том, что данные находятся не в cp1251 как думает сервер и если вы просите их в cp1251, то есть сервер отдает их без перекодировки, то всё в порядке. А если вы указываете любую другую кодировку, то возникает проблема.
Чтобы убедиться попробуйте указать
$dbh->do( "set names utf8" );

Неактивен

 

#5 25.01.2012 16:32:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: кодировка

А в чем, собственно, проблема то?
Выполнять SET NAMES после подключения — это правильно, и это единственный
способ указать серверу, в какой кодировке Вы хотите получать данные.

Неактивен

 

#6 25.01.2012 17:13:41

dmtr
Участник
Зарегистрирован: 18.01.2012
Сообщений: 9

Re: кодировка

vasya написал:

Проблема в том, что данные находятся не в cp1251 как думает сервер и если вы просите их в cp1251, то есть сервер отдает их без перекодировки, то всё в порядке. А если вы указываете любую другую кодировку, то возникает проблема.

я не понимаю. на что тогда влияет параметр

[client]
default-character-set=cp1251

разве он не определят кодировку в которой клиент будет получать данные? зачем тогда без "set names" сервер их перекодирует?

Отредактированно dmtr (25.01.2012 17:14:04)

Неактивен

 

#7 25.01.2012 18:07:01

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: кодировка

Представьте, что к Вам подошел незнакомый человек. На каком языке
Вы будете с ним общаться? Нет, Вы не угадали, он китаец.

Так же и с MySQL — «удадать» невозможно. Можно сказать «я — китаец».
И тогда будет понятно, как общаться.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson