1 (изменено: skloker, 2010-03-24 19:31:01)

Тема: mysqlне та кодировка

Кто нибудь мне может подсказать как исправить кракозобры в БД. Отображаеться везде корректно,а если глянуть в дамп, то туши свет кидай гранату.

Web server
Apache/2.2.11 (Win32) PHP/5.2.13
MySQL client version: 5.0.51a
PHP extension: mysqli

MySQL charset: UTF-8 Unicode (utf8)

Type таблиц -MyISAM
Collation - cp1251_general_ci

character_set_client    cp1251
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    cp1251
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    путь к папке charsets верный

2

Re: mysqlне та кодировка

skloker
Как перекодировать подскажем, но чтобы перекодированные данные нормально работали надо обязательно выполнить условие - установить правильную кодировку соединения с MySQL.

Кодировка соединения с MySQL устанавливается так.
Если это распространенный скрипт, то велика вероятность, что у него есть директива конфигурации для установки кодировки соединения с MySQL; в этом случае ее надо только прописать.

Если скрипт самописанный, то надо сразу после функции mysql_connect добавить строку:
[mono]mysql_query('SET NAMES cp1251'); // Кодировка зависит от используемой вами.[/mono]

Для перекодировки дампа покажите структуру любой таблицы из него и вид крякозябов.

Важно! не меняйте сравнение таблиц в phpMyAdmin, это не поможет, но можно убить данные.

3 (изменено: skloker, 2010-03-24 20:37:31)

Re: mysqlне та кодировка

Вот такого плана - Клок РђР»Р,смотрел через программу world pad.К базе цепляюсь не с рутовыми правами и поэтому нет косяков, а вот если цепануться под правами рута,то сразу сайт выдаст ???????. А зачем писать после соединения с базой,у меня везде отображается нормально? Кроме как в дампе.
>>Что значит структуру? Типы там varchar сравнение cp1251_general_ci, что еще там может интересовать?

4

Re: mysqlне та кодировка

skloker сказал:

Типы там varchar сравнение cp1251_general_ci, что еще там может интересовать?

Кодировка и сравнение таблицы и полей. Если везде cp1251, то структура не нужна.

Если перекодировать данные в нормальный вид, то кодировку соединения с MySQL обязательно надо будет поменять, иначе в БД будут данные нормальные, а на сайте крякозябы.

Страницы сайта в кодировке windows-1251?

В phpMyAdmin тоже такие крякозябы Клок РђР»Р?

5

Re: mysqlне та кодировка

да там везде cp1251. В пхпадмине отображается все нормально, на сайте тоже (при условии,если к базе подключатся не под рутом). Страницы тоже с кодировкой cp1251.
Да  без проблем, прописать можно как вы сказали. А как быть с базой?

6

Re: mysqlне та кодировка

Hanut сказал:

Если скрипт самописанный, то надо сразу после функции mysql_connect добавить строку:
mysql_query('SET NAMES cp1251'); // Кодировка зависит от используемой вами.

Прописал как вы и сказали после подключения к базе. После сделал дамп базы, но последние данные также отобржаются как и предыдущие!

7

Re: mysqlне та кодировка

skloker
Попробуйте открыть дамп с помощью нормального текстового редактора, советую Notepad++. По моему у вас с дампом все нормально.

8

Re: mysqlне та кодировка

Hanut спасибо огромное. Действительно зря кипишь поднял )))

9

Re: mysqlне та кодировка

Ув. Профи,

Моя попытка перейти на utf8 не увенчалась успехом, поэтому обращаюсь к вам за помощью.

файлы перекодировал в utf8.  Таблицы в БД - utf8_general_ci

Глобальная кодировка соединения с MySQL:

character_set_client      latin1
character_set_connection     latin1
character_set_database     latin1
character_set_filesystem     binary
character_set_results     latin1
character_set_server     latin1
character_set_system     utf8
character_sets_dir     /usr/share/mysql/charsets/

Текст из языковых файлов отображается правильно, а с базой данных непонятки.
В БД кириллица отображается правильно, в дампе тоже. Но на сайте - ?????????????????????.
Если в текстовом поле на сайте ввести текст кириллицей, после сохранения - на сайте кириллица, но в БД - ?”?????‚?°?????° ?? ?????·?????°?‚

Подскажите, что и где надо изменить?

Спасибо.

10

Re: mysqlне та кодировка

Vit
Проблема в кодировке соединения с MySQL, которую вам обязательно надо установить в utf8.

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

Практически все современные скрипты позволяют выставить кодировку соединения с MySQL в конфигурационном файле. Какой вы используете скрипт я не знаю, поэтому начните с чтения его документации.

Если скрипт самописанный, то необходимо сразу после функции [mono]mysql_connect[/mono] добавить строку:

mysql_query('SET NAMES utf8');

11

Re: mysqlне та кодировка

Спасибо, теперь все в порядке.

12 (изменено: Vit, 2010-07-15 18:01:52)

Re: mysqlне та кодировка

Однако не все в порядке.

Обнаружил, что некоторые изменения внесенные через форму сохраняются в базе, но не отображаются на сайте.
В другом месте вношу изменения, а вместо изменений появляется дублированная информация.

Пробовал искать где я чего напортачил - ничего не нашел. Что это может быть?
Есть какие-нибудь версии?

P.S. Скрипт xtCommerce 3.0.4

Если ввожу текст непосредственно в БД, на сайте он не появляется. Но так не везде, а в некоторых модулях.

13

Re: mysqlне та кодировка

Vit
Какие именно изменения вы вносили в скрипт? Если настраивали с помощью директивы конфигурации, то каким образом?

В какой кодировке таблицы БД?
Как данные отображаются в phpMyAdmin?

14

Re: mysqlне та кодировка

Изменения вносил по рекомендациям найденым на этом форуме и на форуме xtCommerce.

Простите мою неосведомленность, стесняюсь спросить: с помощью директивы конфигурации - это где?

Таблицы в БД в utf8_general_ci. В phpMyAdmin данные отображаются корректно.

15

Re: mysqlне та кодировка

Vit
Документацию xtCommerce я не нашел, но на форуме есть такое решение, хотя не знаю для какой это версии и работает ли оно.

Проблема с модулями может быть, если они используют свою фуркцию подключения к MySQL, тогда их код тоже надо править.

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

Есть еще один момент, который надо проверить. Данные в БД в порядке, кодировка соединения с MySQL в скрипте прописана, значит единственная возможность чтобы не выводились данные - это если файлы скрипта находятся в ANSI, а не в UTF8. Проверить это можно с помощью текстового редактора (рекомендую Notepad++), в строке статуса снизу будет написано либо ANSI, либо UTF8.

16 (изменено: Kaylang, 2010-08-19 19:28:00)

Re: mysqlне та кодировка

Доброго времени суток всемогущий All!

Прошу не пинать меня сапогами, чтобы не создавать новую тему, решил написать о моей проблеме в этой.

Ситуация такая: Меня попросили обновить сайт. Сам сайт лежит на забугорном сервере. Доступ к MySQL через учетку пользователя. MySQL версии 5.0.22. Стоит phpmyadmin версии 2.8.2.4.

MySQL-кодировка:  UTF-8 Unicode (utf8).
Сопоставление с utf8_general_ci.
Текстовые поля с кириллицей используют сопоставление CP1251_general_ci.

Сайт был сделан на Joomla 1.0.15. Материалы сайта на трех языках: русский-итальянский-английский.
На самом сайте кириллица отображается нормально, но при просмотре таблиц через phpmyadmin отображается вопросительными знаками.
Но не в этом основная проблема. Пробема в том, что когда делаю дамп базы посредством phpmyadmin на локальный диск, вся кириллица так и сохраняется в виде вопросительных знаков.

Подскажите, пожалуйста, как решить данную проблему.
Заранее благодарен!

На всякий случай переменные MySQL, касающиеся кодировок.
character set client      utf8
(Глобальное значение)     latin1
character set connection     utf8
(Глобальное значение)     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     utf8_general_ci
(Глобальное значение)     latin1_swedish_ci
collation database     latin1_swedish_ci
collation server     latin1_swedish_ci

17

Re: mysqlне та кодировка

Kaylang
В phpMyAdmin вопросы, а на сайте отображается нормально? Либо я что-то не правильно понял, либо вы ошибаетесь. Пожалуйста, покажите сканы экрана phpMyAdmin и сайта.

18 (изменено: Kaylang, 2010-08-19 22:01:41)

Re: mysqlне та кодировка

Hanut

В phpMyAdmin вопросы, а на сайте отображается нормально? Либо я что-то не правильно понял, либо вы ошибаетесь.

Вы правильно поняли, и, увы, я не ошибаюсь. В данный момент скрин с сайта показать не могу потому, что домен уже подключен на другом хосте. Я занимаюсь переносом сайта на другой хостинг и обновлением до Joomla 1.5.17, но поверьте мне на слово, что на сайте все отображается корректно.

Скрин же phpmyadmin по ссылке: http://img442.imageshack.us/img442/9144/phpmyadmin.jpg

19

Re: mysqlне та кодировка

Проблема в том, что в дамп базы кириллица также записывается вопросиками.

INSERT INTO `jos_categories` (`id`, `parent_id`, `title`, `name`, `image`, `section`, `image_position`, `description`, `published`, `checked_out`, `checked_out_time`, `editor`, `ordering`, `access`, `count`, `params`) VALUES (1, 0, '??????????', '??????????', '', '2', 'left', '', 1, 0, '0000-00-00 00:00:00', NULL, 1, 0, 0, 'imagefolders=*2*'),
(2, 0, '???????', '???????', '', '1', 'left', '', 1, 0, '0000-00-00 00:00:00', NULL, 1, 0, 0, 'imagefolders=*2*'),
(3, 0, '?????? ??????????? ??????', '?????? ??????????? ??????', '', '3', 'left', '<p><br /><a href="index.php?option=com_content&task=view&id=16&Itemid=13&phpMyAdmin=f7367e1df0b6acdda46e5577dba38054">????? ?????????? ??????????</a>, ??????????????  ??????????? ???????????? ?? ? ??????, ??????.  ??????? ?????????????.<br /><br /><font color="#333399"><strong>????????? ?????? ? ?????????? ? ?????????? ?????????? ??????? ??, ????????? ??? ? ?????? ????? ???????????? ??????????????? ??????????. ????????????????? ? ???????????????? ?????? ??????????????, ???????????? ? ??????? ??????????? ?????????? ????????? ? ???????????? ? ???????????? ??????????? ? ?????????????? ?????.</strong></font><br />  <br />??????? ??????????? ????? ??????:<br />?????????????? ?????????, ???????????? ? ??????????? ?????????, ????????, ??????????? ??????????? ? ??????? ?????????? ? ???????????? ??????????????? ???????????.</p>', 1, 0, '0000-00-00 00:00:00', NULL, 1, 0, 0, 'imagefolders=*2*'),

20

Re: mysqlне та кодировка

Kaylang
Не могу понять как такое возможно. Если в phpMyAdmin вопросики, то на сайте тоже должны быть вопросики. Вернуть данные из вопросиков невозможно, это уже битые данные и перенести через дамп их нельзя. Но вот как у вас сайт их выводит - не понятно.

21 (изменено: DmitryV, 2010-08-20 10:56:31)

Re: mysqlне та кодировка

Hanut
Было такое с забугорными хостами пару раз, данные были в кодировке ISO.

Kaylang
на первой странице phpMyAdmin выберете сопоставление CP1251_general_ci и latin1_swedish_ci затем проверьте что будет отображаться в таблицах с кириллицей и под словом кирилица Вы имеете в виду русский текст или кодовую страницу с CP1251_general_ci ? какое сравнение в таблицах исходной базы с русским текстом в базе? Выставите такое же сопоставление на первой странице как и кодировка сравнения таблиц, phpMyadmin на том же хосте стоит или коннектится удаленно?

Kaylang сказал:

на сайте все отображается корректно

Значит не верно сопоставление кодовой страницы в phpMyAdmin.

Kaylang сказал:

Проблема в том, что в дамп базы кириллица также записывается вопросиками

а чем его просматриваете?

Выгрузите файл дампа с опцией Сохранить как файл - проверьте в какой кодировке он корректно отображаеться при загрузке в новую базу укажите эту кодировку на странице импорта.

PS: ни чего не помогло пишите в ПМ помогу удаленно.

22

Re: mysqlне та кодировка

DmitryV сказал:

на первой странице phpMyAdmin выберете сопоставление CP1251_general_ci и latin1_swedish_ci затем проверьте что будет отображаться в таблицах с кириллицей

К сожалению, не дает менять сопоставление. По умолчанию стоит utf8_general_ci. Когда меняю на CP1251_general_ci, страница обновляется и опять в поле значение utf8_general_ci.

DmitryV сказал:

под словом кирилица Вы имеете в виду русский текст или кодовую страницу с CP1251_general_ci

Я имею ввиду русский текст.

DmitryV сказал:

а чем его просматриваете?

Notepad++

DmitryV сказал:

Выгрузите файл дампа с опцией Сохранить как файл - проверьте в какой кодировке он корректно отображаеться

Пробовал просматривать в Notepad++ в разных кодировках, пока никакая не отображает правильно. Продолжу свои изыски в этом направлении.

DmitryV сказал:

PS: ни чего не помогло пишите в ПМ помогу удаленно.

Благодарю! Если сегодня в течении дня сам не справлюсь, то обращусь.

23 (изменено: DmitryV, 2010-08-20 14:28:03)

Re: mysqlне та кодировка

Kaylang сказал:

Благодарю! Если сегодня в течении дня сам не справлюсь, то обращусь.

Ok в ПМ скиньте мне тогда Ваш скайп и я с Вами свяжусь и помогу.

Как альтернативу попробуйте выгрузить с помощью http://sypex.net/files/SypexDumperLite_108.zip киньте в корень вашего сайта и после залейте в phpmyadmin или через него и залейте, потом работайте через phpmyadmin.

PS:
Добавлен автовыбор кодировки, путем установки для CHARSET значения "auto" (установлено по умолчанию). При этом скрипт автоматически выбирает кодировку соединения исходя из кодировки таблицы. Кроме того, добавилась возможность принудительного изменения кодировки таблиц, для этого в RESTORE_CHARSET нужно установить 'forced->имя_кодировки', к примеру 'forced->cp1251'. Это как раз для случаев, когда данные в cp1251, а у таблиц - latin1.


Для коррекции кодировки вашей БД нужно выполнить следующие действия:

Cохранить БД с помощью нового дампера 1.0.8 (предварительно установив в dumper.php следующие значения, CHARSET = 'auto', RESTORE_CHARSET = 'forced->cp1251'), желательно для подстраховки убедиться, что в дампе нормально сохранены русские символы, после чего восстановить таблицы этим же скриптом из только, что созданного дампа. Теперь у таблиц будет правильная кодировка, и phpmyadmin будет правильно показывать и сортировать русские символы.

Но Вы сперва просто им выгрузите дамп и загрузите на новый хост, думаю на новом хосте проблем быть не должно. RESTORE_CHARSET ='forced->cp1251' думаю если у Вас все отображает сайт корректно не нужен, но предполагаю что у Вас как раз данные в одной кодировке а свойства таблиц сравнения в другой тогда надо это исправить.

Если вы перекодируете RESTORE_CHARSET ='forced->cp1251' то возможно Ваши скрипты сайта и phpmyadmin скорее всего будут показывать вопросительные знаки, так как в них не указывается кодировка соединения cp1251, а используется latin1. Для того чтобы это исправить, нужно во всех ваших php-файлах, где вызывается функция mysql_connect, обычно перед вызовом mysql_select_db добавить следующую строку:

mysql_query("/*!40101 SET NAMES 'cp1251' */") or die("Error: " . mysql_error());

В итоге ваши скрипты будут нормально работать как со старыми версиями MySQL, так и с новыми.

Кроме того рекомендуется в с помощью phpmyadmin изменить кодировку по умолчанию для вашей БД, чтобы новые таблицы создавались с правильной кодировкой. В phpmyadmin для этого  нужно выбрать БД, зайти в раздел "Операции" и в выпадающем меню "Сравнения" выбрать правильное (соответствующее вашим данным).

24 (изменено: Kaylang, 2010-08-20 15:05:58)

Re: mysqlне та кодировка

DmitryV

DmitryV сказал:

Ok в ПМ скиньте мне тогда ваш скайп и я с Вами свяжусь и помогу.

В скайпе у меня такой же ник, как и здесь. Обычно, меня первым в списке показывает. Местожительство: Италия.

Попробовал изменить сопоставление БД на CP1251_general_ci, теперь дамп базы сохраняет кириллицу в таком виде:

(2, 0, 0x3f3f3f3f3f3f3f, 0x3f3f3f3f3f3f3f, '', 0x31, 0x6c656674, '', 1, 0, '0000-00-00 00:00:00', NULL, 1, 0, 0, 0x696d616765666f6c646572733d2a322a),

но таблицы поотдельности сохраняются с вопросительными знаками.

Залил dump.php на хост. Постоянно просит пользователя и пароль. Даже если введеные данные правильны.

25 (изменено: DmitryV, 2010-08-20 15:27:45)

Re: mysqlне та кодировка

Kaylang сказал:

лил dump.php на хост. Постоянно просит пользователя и пароль. Даже если введеные данные правильны

а базу указали в настройках к какой коннект идет...
PS: жду в скайпе