1

Тема: Проблема с кодировками

Здравствуйте. При создание сайта на Denwer возникла необходимость импорта csv файла в MySQL базу данных. Для этих нужд выбрал программу SQL Manager 2010 for MySQL. Но как бы я не менял кодировку исходного файла в базу данных все-равно импортируются какие-то крякозябры. Как сделать эти крякозябры читабельны? В php и MySQL, к сожалению новичок. Заранее спасибо за ответ!

2

Re: Проблема с кодировками

Я бы посоветовал использовать для импорта CSV данных phpMyAdmin, для чего следует создать таблицу с необходимым количеством полей в соответствии с CSV данными и их кодировкой, перейти на страницу импорта, выбрать формат импортируемого файла CSV и, при необходимости, настроить параметры импорта.

3 (изменено: 1Ruslan1, 2011-10-18 13:44:42)

Re: Проблема с кодировками

Спасибо большое за совет. Но мне необходимо импортировать данные в раннее созданные таблицы (импортирую для virtuemart 2.0.0). Введя запрос SHOW VARIABLES LIKE 'char%' получил следующие данные:
character_set_client     utf8
character_set_connection     utf8
character_set_database     utf8
character_set_filesystem     binary
character_set_results     utf8
character_set_server     cp1251
character_set_system     utf8
character_sets_dir     \usr\local\mysql-5.1\share\charsets\
Пробовал импортировать csv файл в кодировках UTF-8, UTF-8 без BOM. Результат - крякозябры на сайте, в phpmyadmin, MySQL Manager. Пробовал импортировать в ANSI. Результат - крякозябры на сайте, в phpmyadmin, а в MySQL Manager все прекрасно читается. Пробовал экспортировать читабельные кирилические строки из базы и их же импортировать - с ними та же история... Даже не знаю что уже делать...

4

Re: Проблема с кодировками

1Ruslan1 сказал:

Пробовал импортировать в ANSI. Результат - крякозябры на сайте, в phpmyadmin, а в MySQL Manager все прекрасно читается.

Это хорошо, значит так и импортируйте. Получается таблицы у вас должны быть в кодировке cp1251, а страницы сайта в windows-1251.

Чтобы на сайте кириллица выводилась нормально, надо найти конфигурационную директиву скрипта, с помощью которой можно установить кодировку соединения с MySQL, и прописать в ней cp1251. Еще один момент - это обязательно надо создать отдельного пользователя MySQL, наделить его необходимыми привилегиями (не выбирайте привилегии администрирования) на базу данных скрипта и прописать в конфигурации скрипта подключение этим пользователем. Нельзя подключать скрипт под root.

5

Re: Проблема с кодировками

Огромное Вам спасибо. В кодировке соединения с MySQL установил cp1251 и все сразу заработало!

6

Re: Проблема с кодировками

Дабы не создавать новую тему. Простые вопросы от чайника.
Собрался переносить несколько сайтов с одного хостинга на другой. Делаю дамп базы - спрашивает кодировку. Импортируешь на другом хостинге - то же. Отсюда вопросы:

1. В какой кодировке делать дамп? От чего это зависит? Где смотреть? И вообще, не понимаю, у базы наверное, уже есть какая-то кодировка, а дамп это просто заархивированная копия (или я не прав), зачем при создании дампа кодировку уточнять???

2. Где в базе смотреть кодировку? Она там указана во многих местах.

3. Предполагаю, что при импорте базы необходимо указать ту же кодировку, что и при создании дампа. Однако, если у меня есть дамп базы, который делал не я, какую кодировку ставить в phpmyadmin при импорте? От чего это зависит и где смотреть?

С ув.

7

Re: Проблема с кодировками

seofantom сказал:

В какой кодировке делать дамп?

Последние версии phpMyAdmin не будут спрашивать необходимую кодировку дампа и всегда экспортируют в utf8, в независимости от данных, они будут предварительно перекодированы. Это самый лучший вариант, который не вызовет проблем при импорте, но в этом случае необходимо на странице импорта выбрать кодировку файла utf8, опять-таки независимо от того в какой кодировке были таблицы.

seofantom сказал:

Где в базе смотреть кодировку? Она там указана во многих местах.

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

seofantom сказал:

Однако, если у меня есть дамп базы, который делал не я, какую кодировку ставить в phpmyadmin при импорте? От чего это зависит и где смотреть?

По умолчанию, в phpMyAdmin будет импорт файла в кодировке utf8, что является рекомендуемым способом переноса данных. Менять кодировку вручную необходимо только в том случае, если phpMyAdmin не смог импортировать данные, или импортировал их в искаженном виде. Узнать кодировку файла дампа можно открыв его в текстовом редакторе, например в Notepad++, в статусной строке которого будет указано ANSI или UTF8. ANSI таблица для хранения кириллицы равнозначна кодировке windows-1251.

8 (изменено: seofantom, 2011-10-19 18:17:08)

Re: Проблема с кодировками

Hanut сказал:

[...Узнать кодировку файла дампа можно открыв его в текстовом редакторе, например в Notepad++, в статусной строке которого будет указано ANSI или UTF8. ANSI таблица для хранения кириллицы равнозначна кодировке windows-1251.

Спасибо, многое прояснили. Вот только что есть "статусная строка" ? Где она? Вот, к примеру, база DLE-сайта. Там есть такие строки:

10  /*!40101 SET NAMES utf8 */;
22  DROP TABLE IF EXISTS `dle_admin_sections`;
24  SET character_set_client = utf8;
34  ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Ну и т.д. в таком же духе везде - set_client = utf8; и  DEFAULT CHARSET=cp1251;
Где тут статусная строка и какая здесь кодировка?

И еще. К примеру сайт на DLE. В файле \engine\data\dbconfig.php есть строка define ("COLLATE", "cp1251"); Что означает эта строка и значит ли это, что дамп я всё равно могу сделать с  utf-8 ?

9

Re: Проблема с кодировками

seofantom сказал:

Вот только что есть "статусная строка" ?

В программе Notepad++ есть в самом низу строка, где пишется номер текущей строки на которой стоит курсор, размер открытого файла и его кодировка - ANSI или UTF8. Откройте дамп с помощью Notepad++ и вы все увидите.

И еще. К примеру сайт на DLE. В файле \engine\data\dbconfig.php есть строка define ("COLLATE", "cp1251"); Что означает эта строка и значит ли это, что дамп я всё равно могу сделать с  utf-8 ?

Можете делать файл дампа в utf8, это ничего не испортит.

10

Re: Проблема с кодировками

Hanut сказал:

В программе Notepad++ есть в самом низу строка, где пишется номер текущей строки на которой стоит курсор, размер открытого файла и его кодировка - ANSI или UTF8.

)) кто бы мог подумать

Спасибо огромное за простые и понятные разъяснения!