1

Тема: На манеже все те же: кодировка

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

вот что у меня есть:

MySQL - 4.1.20-log
    * Protocol version: 10
    * Сервер: Localhost via UNIX socket
    * MySQL-кодировка: UTF-8 Unicode (utf8)
    * Сопоставление соединения с MySQL: cp1251_general_ci

SQL-запрос: SHOW VARIABLES LIKE 'character%';
character_set_client     utf8
character_set_connection     cp1251
character_set_database     cp1251
character_set_results     utf8
character_set_server     latin1
character_set_system     utf8
character_sets_dir     /usr/local/share/mysql/charsets/

вот часть того дампа, который я пытаюсь импортировать:

[spoiler]-- phpMyAdmin SQL Dump
-- version 2.8.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost:3306
-- Время создания: Мар 21 2008 г., 13:30
-- Версия сервера: 4.1.20
-- Версия PHP: 4.4.3
--
-- БД: `u00068_dle`
--

-- --------------------------------------------------------

--
-- Структура таблицы `dle_banned`
--

CREATE TABLE `dle_banned` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci (
  `id` smallint(5) NOT NULL auto_increment,
  `users_id` mediumint(8) NOT NULL default '0',
  `descr` text NOT NULL,
  `date` varchar(20) NOT NULL default '',
  `days` smallint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `user_id` (`users_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

--
-- Дамп данных таблицы `dle_banned`
--


-- --------------------------------------------------------

--
-- Структура таблицы `dle_category`
--

CREATE TABLE `dle_category` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci (
  `id` smallint(5) NOT NULL auto_increment,
  `parentid` smallint(5) NOT NULL default '0',
  `posi` smallint(5) NOT NULL default '1',
  `name` varchar(50) NOT NULL default '',
  `alt_name` varchar(50) NOT NULL default '',
  `icon` varchar(200) NOT NULL default '',
  `skin` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=49 ;

--
-- Дамп данных таблицы `dle_category`
--

INSERT INTO `dle_category` VALUES (2, 0, 9, 'Россия юг', 'russia_south', '', '');
INSERT INTO `dle_category` VALUES (3, 0, 1, 'Крым', 'crimea', '', '');

и т.д.[/spoiler]

на сайте выводится вот что:
?‚?????????????…: ?‚ ?°? ?§?¤???«?? "?„?«?? ?????°? ?????­???±???? " ?­? ?µ?®?¤?????±?? ?­?®???»?© ? ?????­???±?????© ?¤?®???®???®?° ?? ?¤?®???®???®?° ???????«??-???°?®?¤? ?¦??.

при коннекте бд вот что у меня записано

[spoiler]function connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1)
{
if(!$this->db_id = @mysql_connect($db_location, $db_user, $db_pass)) {
if($show_error == 1) {
$this->display_error(mysql_error(), mysql_errno());
} else {
return false;
}
}

if(!@mysql_select_db($db_name, $this->db_id)) {
if($show_error == 1) {
$this->display_error(mysql_error(), mysql_errno());
} else {
return false;
}
}
mysql_query("/*!40101 SET NAMES 'cp1251' */");
return true;
}[/spoiler]

в .htaccess
есть запись AddDefaultCharset cp1251

и еще. когда я потом, для интереса делаю экспорт импортированной базы (о которой рассказано выше), на выходе в файле .sql получаются вот такие вещи:
[spoiler]
-- phpMyAdmin SQL Dump
-- version 2.8.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost:3306
-- Время создания: Мар 28 2008 г., 17:58
-- Версия сервера: 4.1.20
-- Версия PHP: 4.4.3
--
-- БД: `u00068_dle`
--

-- --------------------------------------------------------

--
-- Структура таблицы `dle_banned`
--

CREATE TABLE `dle_banned` (
  `id` smallint(5) NOT NULL auto_increment,
  `users_id` mediumint(8) NOT NULL default '0',
  `descr` text NOT NULL,
  `date` varchar(20) NOT NULL default '',
  `days` smallint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `user_id` (`users_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

--
-- Дамп данных таблицы `dle_banned`
--


-- --------------------------------------------------------

--
-- Структура таблицы `dle_category`
--

CREATE TABLE `dle_category` (
  `id` smallint(5) NOT NULL auto_increment,
  `parentid` smallint(5) NOT NULL default '0',
  `posi` smallint(5) NOT NULL default '1',
  `name` varchar(50) NOT NULL default '',
  `alt_name` varchar(50) NOT NULL default '',
  `icon` varchar(200) NOT NULL default '',
  `skin` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=49 ;

--
-- Дамп данных таблицы `dle_category`
--

INSERT INTO `dle_category` VALUES (2, 0, 9, '???®?±?±???? ????', 'russia_south', '', '')[/spoiler]

пожалуйста, подскажите, как тут можно подправить все..? и насколько это реально....

2

Re: На манеже все те же: кодировка

well
С дампом у вас все в порядке, с функцией соединения тоже, проверьте в какой кодировке создана сама БД в которую вы импортируете дамп, подозреваю, что это utf8.

В phpMyAdmin это можно посмотреть так: выбираем БД, переходим на вкладку "Операции", снизу в блоке сравнение должно быть выбрано cp1251_general_ci. Только учтите, что смена сравнения не перекодирует уже имеющиеся данные, поэтому сперва БД надо удалить, затем создать заново, или поменять сравнение у созданной и затем импортировать дамп.

3 (изменено: well, 2008-03-30 21:52:40)

Re: На манеже все те же: кодировка

посмотрела кодировку самой БД, в которую импортирую дамп - сравнение выбрано тоже верно - cp1251_general_ci..
кстати в таблицах в самой базе (если смотреть через функцию у таблиц "обзор" ), данные лежат в таком виде:
?„?????±?????© ?? ?¬?®?«?®?¤???¦?­?»?© ?®???¤?»?µ

и при этом кодировка у всех таблиц тоже cp1251_general_ci

p.s. от безысходности я все же удалила бд. создала новую (при создании указала кодировку cp1251), и восстановила в нее дамп. результат остался прежний..

4

Re: На манеже все те же: кодировка

well
Возможно у вас файл дампа находится в кодировке cp1251, попробуйте ее выбрать на странице импорта.

5

Re: На манеже все те же: кодировка

Hanut
кстати да. файл дампа и правда (насколько я понимаю происходящее) находится в кодировке cp1251
размер дампа 4 МБ, поэтому я обычно его через ssh импортирую
подскажите, пожалуйста, а можно ли как-нибудь его загрузить через phpMyAdmin с указанием при этом кодировки?

6

Re: На манеже все те же: кодировка

ответ на последний вопрос нашла сама. чтобы указать кодировку базы при импорте через шелл вводится следующая команда:
mysql -u юзер -p -D имя_бд --default-character-set=cp1251 < бекап.sql
затем пароль

мою проблему это, к сожалению не решило.
но когда я указываю кодировку базы при импорте utf8, проблема сводится к более стандартной (не уверена, правда, что к более позитивной..)) - сплошные вопросительные знаки..

7

Re: На манеже все те же: кодировка

well сказал:

подскажите, пожалуйста, а можно ли как-нибудь его загрузить через phpMyAdmin с указанием при этом кодировки?

Для этого на странице импорта находится выпадающий список с названием "Кодировка файла".

4 МБ - это небольшой размер дампа, должен импортироваться через phpMyAdmin.

well сказал:

mysql -u юзер -p -D имя_бд --default-character-set=cp1251 < бекап.sql

Не то! Ключ --default-character-set=cp1251 устанавливает изначальную кодировку для данных таблицы.
Команда mysql всегда читает sql файл передаваемый ей в параметрах, как находящийся в кодировке utf8, поэтому у вас при импорте выходят вопросики.