1

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

После обновления движка DLE вся кирилица стала отображатся знаками вопросов. При просмотре бд в пме кирилица отображается "???? ? ??? ????????", а на сайте "???? ??".  Пробовал менять кодировку через пма с latin1_swedish_ci на cp1251_general_ci путем запроса ALTER TABLE `dle_post` DEFAULT CHARACTER SET cp1251, вроде отображается что все поменялось но при просмотре данных всеравно "????" (даже в самой базе вся кирилица в данной таблице стала знаками вопросов)
Уже даже не знаю что еще пробовать....
В настройках сайта стоит кодировка windows-1251

SHOW GLOBAL VARIABLES LIKE 'char%

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

2

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

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

ВКонтакте Facebook Twitter

3

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

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

4

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

mayerz
Правильным было бы сделать конвертацию дампа из крякозябов в кириллицу, затем импорт в БД и установку кодировки соединения с MySQL. Но можно сделать так, как было: в БД крякозябы, на сайте кириллица.

Для первого варианта нужен дамп. Его необходимо открыть и найти любую таблицу имеющую поля с крякозябами; покажите структуру этой таблицы и пример вида крякозяб. После этого вам будет отправлен скрипт перекодировки с инструкциями его использования. После перекодировки необходимо будет установить кодировку соединения с MySQL: если существует директива конфигурации скрипта устанавливающая кодировку соединения, то надо ее выставить в соответствии с кодировкой данных в БД; если такой директивы нет, то надо найти вхождение функции mysql_connect и сразу после нее добавить строку:
mysql_query('SET NAMES cp1251'); // Если кодировка данных в БД cp1251.

Во втором варианте надо только установить кодировку соединения с MySQL, но устанавливать ее надо в latin1, то есть, при наличии директивы конфигурации скрипта устанавливающую кодировку соединения выставить ее в latin1; либо найти в файлах скрипта вхождение mysql_connect и сразу после нее добавить строку:
mysql_query('SET NAMES latin1');

Еще раз: правильным является только первый вариант!

ВКонтакте Facebook Twitter

5

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

я так понимаю это то что нужно:

CREATE TABLE IF NOT EXISTS `dle_post` (
...
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3049 ;

второй вариант кстати результата не дал.

6

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

mayerz
Что-то не то в дампе. Крякозябы должны выглядеть, как в phpMyAdmin (???? ? ??? ????????). Если вы открывали дамп в Блокноте, попробуйте Notepad++.

ВКонтакте Facebook Twitter

7

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

да, точно.
вот например:

'????????-???????? ???????

8

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

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

ВКонтакте Facebook Twitter

9

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

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

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Warner Music International.', '18-го декабря

в чем может быть проблема? при импорте выбирал кодировку cp1251

Отредактировано mayerz (2009-11-23 21:59:10)

10

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

mayerz
Поищите этот кусок данных в дампе. Надо посмотреть как он там выглядит и по какой причине выходит ошибка.

ВКонтакте Facebook Twitter

11

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

после перекодировки не все апострофы в словах заменились на \\'' и изза этого нарушается синтаксис mysql...можно както этот процесс поправить в коде самого скрипта?

12

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

mayerz
Добавьте в корень скрипта файл .htaccess со следующей строкой:

php_flag magic_quotes_gpc off

ВКонтакте Facebook Twitter

13

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

Hanut
Огромное Вам спасибо за помощь! все получилось наконецто) даже не знаю чтоб я без Вас делал)

14

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

У меня подобная проблема, но несколько "страньше" smile
Есть форум, работающий под phpbb2+
С самим форумом всё нормально, а вот phpMyAdmin никак не хочет нормально отображать содержимое таблиц - как раз что-то вроде ???.
Можно ли настроить именно phpMyAdmin на нормальное отображение?
На настройки сервера базы вид в phpMyAdmin никак не реагирует.
character set client utf8
(Глобальное значение) latin1
character set connection latin1

Вот первая переменная меня и настораживает - именно её никак не удаётся переключить в какую-либо кодировку.
При любых настройках сервера character set client и character set results, всегда имеют значение utf8.
С этим можно как-то бороться?

Ну и, конечно, буду весьма благодарен, если скинете и мне скрипт для перекодирования дампа.
Пора бы уже перевести форум и базу в современный вид, т.к. многие другие скрипты, используемые на сервере, гораздо лучше работают если кодировка базы будет в utf8.
Правда, сам форум потом, видимо ковырять придётся...

15

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

POP
phpMyAdmin всегда показывает данные в том виде, в каком они находятся в БД; если вы видите крякозябы (???) - значит вместо кириллицы в БД у вас именно они. Заставить phpMyAdmin отображать крякозябы, как кириллицу нельзя, можно только перекодировать все данные БД.

Причину вы тоже верно определили: глобальная кодировка соединения с MySQL установлена в latin1 (character set connection latin1).

Решение проблемы крякозябов заключается в перекодировке данных дампа в нормальный вид, последующий импорт и обязательная установка кодировки соединения с MySQL в необходимую кодировку (в вашем случае это cp1251).

Скрипт перекодировки я вам выслал вместе с типичной инструкцией.

Кодировка соединения с MySQL в форуме phpBB кажется можно установить в файле конфигурации (смотрите документацию). Если не найдете, то придется править код форума. Ищем функцию mysql_connect и сразу после нее добавляем строку:

mysql_query('SET NAMES cp1251');

ВКонтакте Facebook Twitter

16

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

Спасибо.
Но тут всё гораздо хуже.
Честно говоря, я не знаю в какой кодировке хранятся данные в таблицах, но форум отображает их верно. Причём, при сопоставлении соединению кодировки именно latin1. Скорее всего, Вы правы - в базе хранится вовсе не то, что отображается в форуме.
Проблема в том, что никакими штатными методами не удаётся заставить phpMyAdmin установить нужную кодировку на подключении.
Причину нашёл - в скриптах phpMyAdmin, жёстко прописана кодировка подключения utf8 - именно тем способом, что Вы предложили.
Кстати, phpMyAdmin версии 3.2.4. Это может быть важно.
Вобщем, в самом phpMyAdmin настоящая каша с кодировками - в панели отображается не реальная кодировка клиента, а та, что установлена в языковом файле (а в моём экземпляре все языковые файлы были в utf8), а реальное подключение намертво залочено в скрипте.
Вобщем, даже решив проблему отображения в Myadmin - е, получил кучу проблем с импортом уже перекодированных дампов.
Если хватит терпения, я, конечно добью его. Так, чтобы можно было нормально работать с любыми базами в любых комбинациях charset.
Ещё раз спасибо.

P.S.
У меня сейчас задача - перетащить форум на новое железо, при этом, по возможности перейти на БД, полностью функционирующую в utf8.
Впринципе, через пляски с бубном удалось перетащить и перекодировать базу.

Отредактировано POP (2009-12-06 23:43:25)

17

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

у меня практически такая же проблема,но....
меню отображается нормально,
помогите!!!!!!!!!!

чё делать?

18

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

maxick95 пишет:

у меня практически такая же проблема,но....
меню отображается нормально,

1) Смотрите как кириллица отображается в phpMyAdmin.
2) Уточните в какой кодировке страницы сайта.
3) Покажите структуру любой таблицы содержащей поля с кириллицей.

ВКонтакте Facebook Twitter

19

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

кодировка cp1251
в phpmyadmin кириллица тоже отображается вопросительными знаками

??????????? ?????? ??????? ?????????? ???????? ????????? ????? ?????:<br /><br /><!--QuoteBegin--><div class="quote"><!--QuoteEBegin-->? ???????????? ?????? ?? ?????? (??????????? ?????????) ?????????????? ????????? ??????????? ? ???????????? ????????????<br />? ??????????????<br />? ???????? ????, ?????????? ???????<br />? ?????? ????, ???????????<br />? ?????? (??????) ???????????????, ???????????????????<br />? ?????? ????, ?????????, ??????????? ? ???????????<br />? ?????? ????, ??????<br />? ?????????? ????<br />? ?????????? ?????? ????<br />? ??????? ????????, ??????<!--QuoteEnd--></div><!--QuoteEEnd-->

использую dle 9.2

Отредактировано maxick95 (2011-07-22 12:45:54)

20

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

maxick95 пишет:

в phpmyadmin кириллица тоже отображается вопросительными знаками

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

ВКонтакте Facebook Twitter

21

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

Hanut пишет:

POP
phpMyAdmin всегда показывает данные в том виде, в каком они находятся в БД; если вы видите крякозябы (???) - значит вместо кириллицы в БД у вас именно они. Заставить phpMyAdmin отображать крякозябы, как кириллицу нельзя, можно только перекодировать все данные БД.

Причину вы тоже верно определили: глобальная кодировка соединения с MySQL установлена в latin1 (character set connection latin1).

Решение проблемы крякозябов заключается в перекодировке данных дампа в нормальный вид, последующий импорт и обязательная установка кодировки соединения с MySQL в необходимую кодировку (в вашем случае это cp1251).

Скрипт перекодировки я вам выслал вместе с типичной инструкцией.

Кодировка соединения с MySQL в форуме phpBB кажется можно установить в файле конфигурации (смотрите документацию). Если не найдете, то придется править код форума. Ищем функцию mysql_connect и сразу после нее добавляем строку:

mysql_query('SET NAMES cp1251');

Спасибо, помогло!