SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 19.10.2010 00:42:05

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Проблемы с кодировкой при переносе

Может, дадите дельный совет:
На старом сайте было всё нормально. Стал переносить сайт. Зашёл в mysql – но там не русские буквы, а какая-то фигня (вопросики). Написал в тех. подержу хостинга. Они – решайте сами проблему. Но я читал и думаю, что они просто сменили версию mysql и теперь в БД – русские буквы отображаются криво.
Я вручную через phpmyadmin сделал запросы на поля таблиц, где были русские буквы: вот так – UPDATE cpg149_config SET value = CONVERT(CONVERT(CONVERT(value USING cp1251) USING binary) USING utf8);

В mysql  – теперь появились русские буквы. Таблицы имели кодировку cp1251_general_ci.

Я сделал дамп через putty и залил в новую базу. В БД также русский нормально, а вот на сайте только вопросики.

Фотогалерея –  Coppermine Photo Gallery. В ней в настройках есть выставление кодировки. Из представленных там – только utf8 подходит.

Старый сайт лежал на нормальном, но простом хостинге - а теперь купил vps-хостинг.

По запросу: SHOW VARIABLES

Выдаёт MySQL:

character_set_client    utf8
character_set_connection    cp1251
character_set_database    latin1
character_set_filesystem    binary
character_set_results    utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/
collation_connection    cp1251_general_ci
collation_database    latin1_swedish_ci
collation_server    latin1_swedish_ci


А по тому же запросу в старой БД, вот:

character_set_client    utf8
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    utf8
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/local/share/mysql/charsets/
collation_connection    cp1251_general_ci
collation_database    cp1251_general_ci
collation_server    cp1251_general_ci

Что можно сделать?

Отредактированно LordStyle (19.10.2010 23:20:02)

Неактивен

 

#2 19.10.2010 00:56:16

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

Re: Проблемы с кодировкой при переносе

FAQ №3

Неактивен

 

#3 19.10.2010 23:02:49

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Re: Проблемы с кодировкой при переносе

Не понимаю, что именно надо делать в моей ситуации((( Можете дать конкретные советы?

Неактивен

 

#4 19.10.2010 23:29:04

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

Re: Проблемы с кодировкой при переносе

Конкретно — нужно преобразовать данные, добавить SET NAMES после подключения,
и всё заработает. Учитывая Ваши CONVERTы, Вы понимаете, что Вы делаете smile

Неактивен

 

#5 20.10.2010 00:36:17

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Re: Проблемы с кодировкой при переносе

Я использовал CONVERT - чтобы как-то увидеть в старой БД русский язык. А как именно преобразовать данные?

Неактивен

 

#6 20.10.2010 01:03:54

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

Re: Проблемы с кодировкой при переносе

Точно так же?

Неактивен

 

#7 20.10.2010 18:36:50

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Re: Проблемы с кодировкой при переносе

Что-то не получается(
Ну, вот смотри:
1. У меня сайт;
2. Я решил перенести его на vps-хостинг;
3. Я зашёл в БД и увидел, что там вместо русских букв иероглифы - я так понимаю из-за того ,что хостер сменил версию MySQL. Но на сайте всё отображалось нормально;
4. Я через putty сделал дамп;
5. Создал на vps-хостинге новую БД и залил дамп через SypexDumperLite_108;
6. И залил файлы фотогалереи через ftp;
7. Теперь в новой БД тоже иероглифы: РјС‹ БЫЛР? такими дружными;
8. А на сайте ?�???�?????�?�?�???�?? ???�?�??????????;
9. В теге сайта стоит: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />;
10. В админке сайта отмечаю кодировку тоже utf8;
11. Есть файл подключения БД:

<?php
// Coppermine configuration file

// MySQL configuration
$CONFIG['dbserver'] =                         'localhost';        // Your database server
$CONFIG['dbuser'] =                         '***';        // Your mysql username
$CONFIG['dbpass'] =                         '***';                // Your mysql password
$CONFIG['dbname'] =                         '***';        // Your mysql database name


// MySQL TABLE NAMES PREFIX
$CONFIG['TABLE_PREFIX'] =                'cpg149_';
?>

12. Через админку vps-хостига создавал новую БД с кодировкой cp1251;
13. По запросу: SHOW VARIABLES - phpmyadmin пишет:

character_set_client    utf8
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/
collation_connection    cp1251_general_ci
collation_database    cp1251_general_ci
collation_server    latin1_swedish_ci

14. При заходе в phpmyadmin написано:

Версия сервера: 5.0.51a-24+lenny2
Версия протокола: 10
Сервер: Localhost via UNIX socket
Пользователь: eurogal1@localhost
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL:  cp1251_general_ci

15. В операциях phpmyadmin тоже стоит сравнение: cp1251_general_ci;
16. Таблицы и поля таблиц - сравнение: cp1251_general_ci;


Подскажите, плиз, что где прописать, добавить, переконвертировать и как?

Неактивен

 

#8 20.10.2010 22:42:45

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

Re: Проблемы с кодировкой при переносе

Вы статью принципиально прочитать не хотите? smile

Неактивен

 

#9 20.10.2010 23:46:00

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Re: Проблемы с кодировкой при переносе

Нет, не принципиально)

Первый способ: метод резервных копий - не сработал;
SET NAMES utf8;
SET character_set_server=utf8;

(я создал БД, зашёл через phpmyadmin, сделал запросы (те, что выше), залил дамп) - всё осталось по-прежнему.

Второй способ: метод сервера - не понял:
ALTER TABLE mytable MODIFY data BINARY(10);
ALTER TABLE mytable MODIFY data CHAR(10) CHARSET koi8r;

где здесь какие свои данные вставлять(

Третий способ - не подходит, дамп более 100 мб и редактор виснет при открытии.

Что я могу делать не так и, напомню, что у меня vps-хостинг и я могу задавать кодировку БД при создании.

Неактивен

 

#10 21.10.2010 21:46:01

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

Re: Проблемы с кодировкой при переносе

LordStyle написал:

3. Я зашёл в БД и увидел, что там вместо русских букв иероглифы - я так понимаю из-за того ,что хостер сменил версию MySQL. Но на сайте всё отображалось нормально;

Раз на сайте все нормально, значит данные в порядке.
То, что вы видите иероглифы - это не "в БД – русские буквы отображаются криво" (БД вообще не отображает букв), это ваш клиент (пхпадмин) их криво  отображает. Пхпадмин плохой выбор, в частности он имеет какие-то свои настройки кодировок и работа с ним это танцы с бубном.
Используйте MySQL GUI Tools - http://dev.mysql.com/downloads/gui-tools/5.0.html
В вашем случае важно, что данные в порядке (раз правильно отображаются на сайте) и никаких конвертов делать не нужно.

LordStyle написал:

4. Я через putty сделал дамп;

putty не умеет делать дамп, это всего лишь клиент для работы с удаленными протоколами. Дамп вы все-таки делаете как-то иначе, например, с помощью mysqldump.
Обратите внимание, что данные при этом будут записаны в кодировке териминала (не факт, что это будет utf-8).

LordStyle написал:

5. Создал на vps-хостинге новую БД и залил дамп через SypexDumperLite_108;

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

Неактивен

 

#11 21.10.2010 23:20:52

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Re: Проблемы с кодировкой при переносе

LordStyle написал:

7. Теперь в новой БД тоже иероглифы: РјС‹ БЫЛР? такими дружными;
8. А на сайте ?�???�?????�?�?�???�?? ???�?�??????????;

Это почему-то на старом сайте нормально всё было. А на новом не так!


LordStyle написал:

4. Я через putty сделал дамп;

Я сделал командой: mysqldump --opt --default-character-set=char -ulogin -ppass db > dump.sql



Сейчас попробую загрузить через MySQL GUI Tools, но сомневаюсь, т.к. в дампе то русский язык при просмотре выдаёт такие же иероглифы!

Неактивен

 

#12 21.10.2010 23:45:41

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

Re: Проблемы с кодировкой при переносе

LordStyle написал:

Я сделал командой: mysqldump --opt --default-character-set=char -ulogin -ppass db > dump.sql

А что это за кодировка такая char?
Судя по всему на этом этапе у вас и происходит ошибка.
Вам нужно убедиться, что сервер MySQL правильно понимает кодировку вашего терминала. Для этого сделайте из терминала выборку русскоязычных данных и если будут иероглифы значит нужно явно указать кодировку, в которой работает ваш терминал.
Чтобы определить её выполняйте перебором set names и выборку русскоязычных данных. Как получите русские буквы - определите кодировку.

LordStyle написал:

Сейчас попробую загрузить через MySQL GUI Tools, но сомневаюсь, т.к. в дампе то русский язык при просмотре выдаёт такие же иероглифы!

Грузить через MySQL GUI Tools не надо, тем более кривой дамп.

Неактивен

 

#13 22.10.2010 00:17:21

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Re: Проблемы с кодировкой при переносе

В том-то и дело, что запросами UPDATE cpg149_config SET value = CONVERT(CONVERT(CONVERT(value USING cp1251) USING binary) USING utf8); - я уже не могу экспериментировать на старой БД. Но я сейчас запросил у тех. поддержки хостера резервную копию БД до операций CONVERT. Но думаю, что их дамп (хотя он должен быть самым верным) - тоже будет иметь иероглифы.

Что я могу сделать имея кривой дамп, если нет возможности экспериментировать со старой БД?

Неактивен

 

#14 22.10.2010 00:32:48

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

Re: Проблемы с кодировкой при переносе

Ни надо делать никаких апдейтов! Я где-то писал, что их нужно делать?

Если у вас нет доступа к старой БД, а только кривой дамп, то статья (3ий способ, Решение проблемы: правка резервной копии).

Чтобы определить в какой кодировке находятся ваши данные, можно воспользоваться, например, сервисом http://www.artlebedev.ru/tools/decoder/

Неактивен

 

#15 22.10.2010 01:37:04

LordStyle
Участник
Зарегистрирован: 19.10.2010
Сообщений: 8

Re: Проблемы с кодировкой при переносе

Ок, понял. Правка резервной копии. Посмотрел: CP1251 → UTF-8 (пишет лебедь), но и то несколько букв не смог перевести...

А теперь очень скромный вопрос: в каком клиенте делать эти запросы: shell> recode utf8..latin1 mydb.sql? в phpmyadmin  - выдаётся ошибка!

Отредактированно LordStyle (22.10.2010 01:38:27)

Неактивен

 

#16 22.10.2010 02:13:27

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

Re: Проблемы с кодировкой при переносе

shell> значит, что команда (recode ...) выполняется в командной строке ОС UNIX

Вроде есть много виндовских программ (типа штирлица), позволяющих перекодировать документ. Гугл вам поможет.

Неактивен

 

Board footer

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