1

Тема: Переезд на другой сервер

заранее прошу прощения за содание новой темы, я честно прошелся по многим топикам и по разной инфе и мои базовые знания не помогли устранить проблему


итак исходный серв
MySQL client version: 5.0.18
phpMyAdmin - 2.8.0.3

 character set client      utf8
(Глобальное значение)     latin1
character set connection     cp1251
(Глобальное значение)     latin1
character set database     latin1
character set filesystem     binary
character set results     utf8
(Глобальное значение)     latin1
character set server     latin1
character set system     utf8
character sets dir     /usr/share/mysql/charsets/
collation connection     cp1251_general_ci
(Глобальное значение)     latin1_swedish_ci
collation database     latin1_swedish_ci
collation server     latin1_swedish_ci

серв назначения
MySQL client version: 4.1.22
phpMyAdmin - 2.10.0.2

 character set client      utf8
(Global value)     latin1
character set connection     cp1251
(Global value)     latin1
character set database     latin1
character set results     utf8
(Global value)     latin1
character set server     latin1
character set system     utf8
character sets dir     /usr/share/mysql/charsets/
collation connection     cp1251_general_ci
(Global value)     latin1_swedish_ci
collation database     latin1_swedish_ci
collation server     latin1_swedish_ci

экспортирую базу в cp1251 и при любых раскладах при импорте получаю абракадабру в таблицах
подскажите, пожалуйста что делать, доступа к серверным настройкам кодировок mysql не имею

2

Re: Переезд на другой сервер

tjk
Давайте по порядку.
Экспортируете данные и в дампе кирилица отображается как?
В какой кодировке создается сам дамп?
При импорте в phpMyAdmin какую кодировку выбираете?

3

Re: Переезд на другой сервер

Hanut сказал:

tjk
Давайте по порядку.
Экспортируете данные и в дампе кирилица отображается как?
В какой кодировке создается сам дамп?
При импорте в phpMyAdmin какую кодировку выбираете?

пробовал по-всякому

если делаю дамп средствами майэдмин с компрессией (там нет выбора) он создается в cp1251 (но насколько я понимаю, это потому что записи в таблице с такими аттрибутами) с такой красотой события
если делаю средствами майэдмин "с выводом на экран" то кириллица отображается

дальше пытался делать дампы через консоль в cp1251 и utf8 и в обоих случаях отображается все в дампах корректно

далее при импорте я пытался ставить и cp1251 и utf8, в это же время игрался с "Сопоставление соединения с MySQL - cp1251_general_ci и utf8_unicode_ci"... при всех возможных комбинациях (с дампом cp1251) ничего из этого не вышло...
сейчас попробую поиграться еще и с utf8 дампом, но не думаю что это принесет какие-то результаты

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

4

Re: Переезд на другой сервер

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

mysqldump --opt --compress --default-character-set=utf8 --user=***** --password=****** --host=******** --databases ******* > backup_utf8.sql

5

Re: Переезд на другой сервер

tjk
1) Посмотрите в phpMyAdmin, какую кодировку имеют таблицы содержащие кирилицу и как она выглядит.
2) Что за компрессия? Я не понял.
3)

tjk сказал:

события

Это означает, что в таблицах с кодировкой cp1251 хранится utf8.
4) Покажите кусок дампа с кирилицей, где она корректно отображается и уточните, в какой кодировке сам дамп.

Теперь по mysqldump.
Ключ --compress всего лишь включает компрессию между клиентом и сервером.
--default-character-set - устанавливает кодировку, если она не определена. Но если кодировка определена, то ключ бесполезен.
И самое главное - никакого перекодирования mysqldump не делает, он всегда сохраняет их в utf8.

Думаю ваша проблема заключается в том что данные хранятся в таблицах с неверной кодировкой и чтобы это исправить вероятно надо будет перекодировать дамп.

6

Re: Переезд на другой сервер

Hanut сказал:

tjk
1) Посмотрите в phpMyAdmin, какую кодировку имеют таблицы содержащие кирилицу и как она выглядит.
2) Что за компрессия? Я не понял.
3)

tjk сказал:

события

Это означает, что в таблицах с кодировкой cp1251 хранится utf8.
4) Покажите кусок дампа с кирилицей, где она корректно отображается и уточните, в какой кодировке сам дамп.

Теперь по mysqldump.
Ключ --compress всего лишь включает компрессию между клиентом и сервером.
--default-character-set - устанавливает кодировку, если она не определена. Но если кодировка определена, то ключ бесполезен.
И самое главное - никакого перекодирования mysqldump не делает, он всегда сохраняет их в utf8.

Думаю ваша проблема заключается в том что данные хранятся в таблицах с неверной кодировкой и чтобы это исправить вероятно надо будет перекодировать дамп.

1) все таблицы cp1251_general_ci, записи отображаются корректно (при этом браузер ставит кодировку utf8)
2) под компрессией я имел ввиду gzip... но это не важно, забудьте
3) так скорей всего и есть, причем помнтся мне что я сам менял эти все кодировки таблиц поскольку через веб у меня не отображались данные
4) правильно отображается дамп созданный через консоль, выглядит так

/*!40000 ALTER TABLE `int_category` DISABLE KEYS */;
LOCK TABLES `int_category` WRITE;
INSERT INTO `int_category` VALUES (1,'site','сайт','0'),(2,'events','события','0'),(3,'me','я','0'),(4,'music','музыка','0'),(5,'opinion','мнения','0'),(6,'art','арт','0'),(7,'mobile_post','с мобильного','0'),(8,'www','интернет','0'),(9,'foto','фото','0'),(10,'denmark','дания','0'),(11,'thoughts','мысли','0'),(12,'series','серии','0'),(13,'life','жизнь','0'),(14,'barcelona','барса','0'),(15,'mktg','маркетинг','0');
UNLOCK TABLES;
/*!40000 ALTER TABLE `int_category` ENABLE KEYS */;

дампы созданные через майэдмин экспорт отображаются криво

7

Re: Переезд на другой сервер

tjk сказал:

4) правильно отображается дамп созданный через консоль, выглядит так

Структуру этой таблицы покажите. Мне надо увидеть какая кодировка прописана на таблицах.

8

Re: Переезд на другой сервер

Hanut сказал:
tjk сказал:

4) правильно отображается дамп созданный через консоль, выглядит так

Структуру этой таблицы покажите. Мне надо увидеть какая кодировка прописана на таблицах.

надеюсь вы об этом)) :

     Поле      Тип      Сравнение      Атрибуты      Ноль      По умолчанию      Дополнительно      Действие
    catid     int(10)         UNSIGNED     Нет         auto_increment     Browse distinct values     Изменить     Уничтожить     Первичный     Уникальное     Индекс     ПолнТекст
    name     varchar(255)     cp1251_general_ci         Нет             Browse distinct values     Изменить     Уничтожить     Первичный     Уникальное     Индекс     ПолнТекст
    fullName     varchar(255)     cp1251_general_ci         Нет             Browse distinct values     Изменить     Уничтожить     Первичный     Уникальное     Индекс     ПолнТекст
    hidden     enum('0', '1')     cp1251_general_ci         Нет     0         Browse distinct values     Изменить     Уничтожить     Первичный     Уникальное     Индекс     ПолнТекст



Статистика ряда    Выражения      Значение
Формат     динамический
Сравнение     cp1251_general_ci
Ряды     15
Длина ряда ?     23
Размер ряда ?     160 Bytes
Далее Autoindex     16

9

Re: Переезд на другой сервер

tjk
Не совсем. Я имел в виду структуру из дампа. Начинающуюся с
CREATE TABLE IF NOT EXISTS `int_category` (

10

Re: Переезд на другой сервер

Hanut сказал:

tjk
Не совсем. Я имел в виду структуру из дампа. Начинающуюся с
CREATE TABLE IF NOT EXISTS `int_category` (

понял, вот

--
-- Table structure for table `int_category`
--

DROP TABLE IF EXISTS `int_category`;
CREATE TABLE `int_category` (
  `catid` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `fullName` varchar(255) NOT NULL default '',
  `hidden` enum('0','1') NOT NULL default '0',
  PRIMARY KEY  (`catid`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=cp1251;

--
-- Dumping data for table `int_category`
--


/*!40000 ALTER TABLE `int_category` DISABLE KEYS */;
LOCK TABLES `int_category` WRITE;
INSERT INTO `int_category` VALUES (1,'site','сайт','0'),(2,'events','события','0'),(3,'me','я','0'),(4,'music','музыка','0'),(5,'opinion','мнения','0'),(6,'art','арт','0'),(7,'mobile_post','с мобильного','0'),(8,'www','интернет','0'),(9,'foto','фото','0'),(10,'denmark','дания','0'),(11,'thoughts','мысли','0'),(12,'series','серии','0'),(13,'life','жизнь','0'),(14,'barcelona','барса','0'),(15,'mktg','маркетинг','0');
UNLOCK TABLES;
/*!40000 ALTER TABLE `int_category` ENABLE KEYS */;

ну а в кривом дампе (рожденным через функцию экспорта) вот так

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

CREATE TABLE `int_category` (
  `catid` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `fullName` varchar(255) NOT NULL default '',
  `hidden` enum('0','1') NOT NULL default '0',
  PRIMARY KEY  (`catid`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=16 ;

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

INSERT INTO `int_category` (`catid`, `name`, `fullName`, `hidden`) VALUES (1, 'site', 'сайт', '0'),
(2, 'events', 'события', '0'),
(3, 'me', 'СЏ', '0'),
(4, 'music', 'музыка', '0'),
(5, 'opinion', 'мнения', '0'),
(6, 'art', 'арт', '0'),
(7, 'mobile_post', 'с мобильного', '0'),
(8, 'www', 'интернет', '0'),
(9, 'foto', 'фото', '0'),
(10, 'denmark', 'дания', '0'),
(11, 'thoughts', 'мысли', '0'),
(12, 'series', 'серии', '0'),
(13, 'life', 'Р¶РёР·РЅСЊ', '0'),
(14, 'barcelona', 'барса', '0'),
(15, 'mktg', 'маркетинг', '0');

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

11

Re: Переезд на другой сервер

tjk
Нет у вас с дампом совершенно никаких проблем. Причем даже тот, что вы назвали кривым, абсолютно нормальный, но находится в utf8. Но если сайт не работает, то надо уточнить в какой кодировке находится сам сайт и если он в utf8, то в том дампе, который нормально отображает кирилицу надо поменять все CHARSET=cp1251 на CHARSET=utf8 и сохранить файл в utf8. Воспользуйтесь для этого текстовым редактором, который позволяет выбирать используемую кодировку, например, Notepad++.

Если сайт в cp1251, то можно попробовать нормальный дамп сохранить в cp1251 с помощью того-же текстового редактора. И затем импортировать его в phpMyAdmin выбрав на странице импорта кодировку файла cp1251.

12

Re: Переезд на другой сервер

сайт определенно в 1251...
попытался перекодировать дамп в 1251 используя N++, но есть у меня подозрение что никаких изменений не происходит когда делаю Дополнения > Convert Ext - convert to cp1251... точней он даже ругается Text is Unicode format и не дает преобразовать пока не сниму галочку в Кодировки - Кодировать в utf-8 (без BOM)

еще такое наблюдение: когда я импортирую базу в 1251, потом иду смотреть значения таблицы, там они отображаются только если меняю кодировку страницы на utf... то есть записи так и не переводятся из псевдо ютф в 1251...
дамп определенно в ютф... конвертнуть его пока не выходит(
нужен ли iconv? я правда не умею с ним работать и вообще не представляю что это

13

Re: Переезд на другой сервер

tjk
Никак не могу понять, почему у вас нет возможности делать выбор кодировки импортируемого файла на странице импорта phpMyAdmin. Почему все импорты происходят в cp1251? Очень странно.

На счет перекодирования с помощью Notepad++, я забыл, что из Юникода он не переводит. Прошу прощения.

Здесь заполните переменные именами файлов и запустите скрипт.

<?php

$input_file = 'test.sql';
$output_file = 'out.sql';

$str = file_get_contents($input_file);
$conv_str = iconv('utf-8', 'windows-1251//IGNORE', $str);
if (!$handle = fopen($output_file, 'w')) {
    print 'Error: Cannot open file "' . $output_file . '".';
} elseif (@fwrite($handle, $conv_str) === false) {
    fclose($handle);
    print 'Error: Cannot write to file "' . $output_file . '".';
} else {
    fclose($handle);
    print 'Done.';
}

?>

14

Re: Переезд на другой сервер

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

файл перекодировался (стал меньше, естественно), но при импорте он опять же стал utf8 в таблицах... может это связано с глобальными настройками? важно ли какая MySQL connection collation?

15

Re: Переезд на другой сервер

еще немного и я вообще перестану понимать...
оказалось что записи в исходной базе хранятся в том же utf-8 но отмечены как cp1251... а сайт работает с cp1251, но при этом все прекрасно отображается...

16

Re: Переезд на другой сервер

tjk
Ничего не понимаю. Знаю только, что с дампом у вас проблем нет. Обратитесь к хостеру.

17

Re: Переезд на другой сервер

мои бесчисленные попытки что-то сделать закончились выбором нового скрипта
а вам спасибо за желание помочь