Задавайте вопросы, мы ответим
Вы не зашли.
Может, дадите дельный совет:
На старом сайте было всё нормально. Стал переносить сайт. Зашёл в 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)
Неактивен
Не понимаю, что именно надо делать в моей ситуации((( Можете дать конкретные советы?
Неактивен
Конкретно — нужно преобразовать данные, добавить SET NAMES после подключения,
и всё заработает. Учитывая Ваши CONVERTы, Вы понимаете, что Вы делаете
Неактивен
Я использовал CONVERT - чтобы как-то увидеть в старой БД русский язык. А как именно преобразовать данные?
Неактивен
Точно так же?
Неактивен
Что-то не получается(
Ну, вот смотри:
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;
Подскажите, плиз, что где прописать, добавить, переконвертировать и как?
Неактивен
Вы статью принципиально прочитать не хотите?
Неактивен
Нет, не принципиально)
Первый способ: метод резервных копий - не сработал;
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-хостинг и я могу задавать кодировку БД при создании.
Неактивен
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 (возможно он имеет какие-то бубны).
Загрузите дамп через терминал, указав правильную кодировку (см предыдущий пункт).
Неактивен
LordStyle написал:
7. Теперь в новой БД тоже иероглифы: РјС‹ БЫЛР? такими дружными;
8. А на сайте ?�???�?????�?�?�???�?? ???�?�??????????;
Это почему-то на старом сайте нормально всё было. А на новом не так!
LordStyle написал:
4. Я через putty сделал дамп;
Я сделал командой: mysqldump --opt --default-character-set=char -ulogin -ppass db > dump.sql
Сейчас попробую загрузить через MySQL GUI Tools, но сомневаюсь, т.к. в дампе то русский язык при просмотре выдаёт такие же иероглифы!
Неактивен
LordStyle написал:
Я сделал командой: mysqldump --opt --default-character-set=char -ulogin -ppass db > dump.sql
А что это за кодировка такая char?
Судя по всему на этом этапе у вас и происходит ошибка.
Вам нужно убедиться, что сервер MySQL правильно понимает кодировку вашего терминала. Для этого сделайте из терминала выборку русскоязычных данных и если будут иероглифы значит нужно явно указать кодировку, в которой работает ваш терминал.
Чтобы определить её выполняйте перебором set names и выборку русскоязычных данных. Как получите русские буквы - определите кодировку.
LordStyle написал:
Сейчас попробую загрузить через MySQL GUI Tools, но сомневаюсь, т.к. в дампе то русский язык при просмотре выдаёт такие же иероглифы!
Грузить через MySQL GUI Tools не надо, тем более кривой дамп.
Неактивен
В том-то и дело, что запросами UPDATE cpg149_config SET value = CONVERT(CONVERT(CONVERT(value USING cp1251) USING binary) USING utf8); - я уже не могу экспериментировать на старой БД. Но я сейчас запросил у тех. поддержки хостера резервную копию БД до операций CONVERT. Но думаю, что их дамп (хотя он должен быть самым верным) - тоже будет иметь иероглифы.
Что я могу сделать имея кривой дамп, если нет возможности экспериментировать со старой БД?
Неактивен
Ни надо делать никаких апдейтов! Я где-то писал, что их нужно делать?
Если у вас нет доступа к старой БД, а только кривой дамп, то статья (3ий способ, Решение проблемы: правка резервной копии).
Чтобы определить в какой кодировке находятся ваши данные, можно воспользоваться, например, сервисом http://www.artlebedev.ru/tools/decoder/
Неактивен
Ок, понял. Правка резервной копии. Посмотрел: CP1251 → UTF-8 (пишет лебедь), но и то несколько букв не смог перевести...
А теперь очень скромный вопрос: в каком клиенте делать эти запросы: shell> recode utf8..latin1 mydb.sql? в phpmyadmin - выдаётся ошибка!
Отредактированно LordStyle (22.10.2010 01:38:27)
Неактивен
shell> значит, что команда (recode ...) выполняется в командной строке ОС UNIX
Вроде есть много виндовских программ (типа штирлица), позволяющих перекодировать документ. Гугл вам поможет.
Неактивен