1 (изменено: MaximSEO, 2012-11-10 17:53:43)

Тема: Крякозябры кодировка в phpMyAdmin

Мне нужно экспортировать результат запроса в phpMyAdmin, но вот беда - русские буквы в полях таблицы отображаются в виде "Александр". На сервере никаких конфигов менять прав не имею, перекодировать таблицы тоже - всё должно остаться как есть. В начале запроса в phpMyAdmin писал "SET NAMES utf8; запрос", также пробовал шаманить что-то вроде SELECT CONVERT(CONVERT(поле USING binary) USING utf8/latin1/cp1251)  FROM таблица - тоже не помогает.

Посоветуйте, пожалуйста, что можно сделать, третий день парюсь!

2

Re: Крякозябры кодировка в phpMyAdmin

Как данные выглядят в phpMyAdmin? В какой вид их надо экспортировать? Где именно кириллица отображается крякозябами?

3

Re: Крякозябры кодировка в phpMyAdmin

Есть существующая база данных. Захожу в phpMyAdmin - вижу вместо русских букв "Александр".
Экспортировать нужно в CSV, но не всю таблицу полностью, а результат запроса. После экспорта тоже чем не пробовал перекодировать - всё-равно либо крякозябры, либо некоторые буквы битые (при перекодировании utf8 -> cp1252).

На сайте данные выглядят нормально.

4

Re: Крякозябры кодировка в phpMyAdmin

Перед запросом выборки попробуйте прописать строку:

SET NAMES latin1;
SELECT...

Кириллица отобразится в нормальном виде, но на счет экспорта в CSV я не уверен. Пробуйте.

5

Re: Крякозябры кодировка в phpMyAdmin

Да, действительно, при помощи SET NAMES latin1 данные отображаются нормально, но "SET NAMES latin1" в экспорт не включается, т.е. экспортируются всё-равно крякозябры.
Hanut, можно ли как-то скопировать всю таблицу/результат запроса в новую таблицу в "нормальной" кодировке, а оттуда уже делать экспорт?

6

Re: Крякозябры кодировка в phpMyAdmin

Пробуйте на тестовой копии таблицы без данных, только структура.

SET NAMES latin1;
INSERT INTO `table_name_2`
SELECT * FROM `table_name_1`;

7

Re: Крякозябры кодировка в phpMyAdmin

CREATE TABLE table2 LIKE table1;
SET NAMES latin1;
INSERT INTO `table_name_2`
SELECT * FROM `table_name_1`;

или

SET NAMES latin1; create table новое_имя_таблицы select * from старое_имя_таблицы;

ничего не меняется, просто 1 в 1 копирует таблицу

8

Re: Крякозябры кодировка в phpMyAdmin

Сделал экспорт таблицы и импортировал её на локалхост. Теперь могу экспериментировать как угодно

9

Re: Крякозябры кодировка в phpMyAdmin

Локально сделать проще, через mysqldump.

mysqldump db_name table_name --default-character-set=latin1 > dump.sql

Затем откройте дамп в текстовом редакторе и проверьте, чтобы таблицы имели кодировку cp1251, после чего дамп можно импортировать в phpMyAdmin выбрав кодировку дампа windows-1251.

10

Re: Крякозябры кодировка в phpMyAdmin

Огромное спасибо, Hanut! Вы волшебник  smile

11

Re: Крякозябры кодировка в phpMyAdmin

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

 > mysqldump -u root --default-character-set=latin1 test > C:\user_export.sql

в базе было: Александр
В файле экспортировало: ???»?µ?????°?????? (открываю в Notepad++)
Что за ерунда может быть?..

12

Re: Крякозябры кодировка в phpMyAdmin

Если экспортировать с --default-character-set=utf8, то в файле сохраняет тоже ???»?µ?????°??????

13

Re: Крякозябры кодировка в phpMyAdmin

MaximSEO сказал:

В файле экспортировало: ???»?µ?????°?????? (открываю в Notepad++)

Не знаю что это. Возможно двойная перекодировка. Проверьте правильно ли выбрана база данных. Возможно в ней уже данные в нормальном виде.

14

Re: Крякозябры кодировка в phpMyAdmin

База данных выбрана правильно. Думал, что может mysqldump кеширует, скопировал базу в базу с другим именем и пробовал экспортировать её - тот же результат.
Сам на локалхосте сижу на денвере, mysqldump качал дополнительно.
Из предположений, что накрылся mysqldump, но как??? Это ведь просто бинарник. Думал, что он какие-то конфиги себе корявые сохранил - переместил его на рабочий стол и запустил экспорт - эффект тот же. Может конфиги хранит в системных папках?..

15

Re: Крякозябры кодировка в phpMyAdmin

mysqldump читает конфигурационный файл my.ini/my.cnf. Причину ошибки объяснить не могу. Велика вероятность, что перенос данных сбил их. Если есть такая возможность, то выполните mysldump прямо на сервере, где стоит БД.

16

Re: Крякозябры кодировка в phpMyAdmin

О! Есть подозрения, что mysqldump перестал видеть перекодировальные таблицы

 > mysqldump
mysqldump: Character set 'cp1251' is not a compiled character set and is not spe
cified in the '\usr\local\mysql-5.1\share\charsets\Index.xml' file

, хотя cp1251 в Index.xml есть. Как это исправить?

17

Re: Крякозябры кодировка в phpMyAdmin

Хотя нет, latin1 - это же comiled character set, для неё Index.xml не нужен. Могу только предположить, что каким-то мистическим образом тогда, когда экспортировало нормально - подгрузило кодировку с помощью Index.xml, а сейчас хватает скомпилированную, которая вероятно является корявой.
Тогда в любом случае нужно как-то сделать, чтоб mysqldump увидел Indexer.xml. Либо, как вариант, не могли бы Вы кинуть мне свой mysqldump.exe, если Вы под Windows?

18

Re: Крякозябры кодировка в phpMyAdmin

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

--character-sets-dir=/usr/local/mysql-5.1/share/charsets

Посмотрите какой версии mysqldump, чтобы он был от версии mysql.

19

Re: Крякозябры кодировка в phpMyAdmin

Indexer.xml видит, но не помогло...

Да, действительно, версии разные...
mysqldump  Ver 10.10 Distrib 5.0.24a, for Win32 (ia32)
mysql  Ver 14.14 Distrib 5.1.40, for Win32 (ia32)

Сейчас попробую выдернуть с последней версии

20

Re: Крякозябры кодировка в phpMyAdmin

Да, помогло. Еще раз спасибо, Hanut!
Как оно сделало бекап нормально первый раз - мистика