Skip to content
General Revolution Evolution Add-ons International
Login | Register | MODX.com
MODX Open Source Content Management System, Framework, Platform and More.
Find a Partner | Hosts + SaaS | Jobs | Donate
  • RegisterSign Up with the MODX Community
  • LoginUse Your MODX.com Account
  • MODX Community Forums
  • International
  • Russian
  •  
  • <
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • >
  • [Solved, TIP!] Кириллица, UTF8 и MySQL#

  • 28814
    1,065
    Разработка сайтов и программных модулей на MODx.
    Опыт работы на MODx с 2005 года. Высокое качество. Дорого!
    Компания Baltic Design Colors: http://www.bdcolors.eu. ICQ 5414441.

    Документация:
    Wiki-учебник (RUS) | Wiki-учебник (ENG) | Основная документация (ENG) | MODx.ru - сайт русской поддержки | Удобный поиск по RU-сайтам о MODx

    Цикл статей на modx.ru:
    Как сделать сайт на MODx с нуля - пошаговое руководство

    FAQs:
    Как правильно задавать вопросы на форуме?
    Как восстановить забытый пароль? | Как разблокировать пользователей MODx?
    Как сделать регистро-независимый поиск? | Как передать данные в сниппет из URL?
    Как создать дополнительные поля для документов (TV)?

    suhinin Reply #1, 5 years, 9 months ago

    Reply
    • Link to this post#1
    Добрый день!
    Помогите, если кто знает, как побороть проблемку с кодировками, в стандартной конфигурации в базе данных сохраняется абракадабра, если писать кириллицей. Однако вывод кода получается нормальным. Все бы ничего, да только при переносе базы с локалхоста на сервер там происходит чепуха и кириллица отображается коряво.
    Нашел такое решение http://modxcms.com/forums/index.php/topic,3584.0.html Поначалу казалось идеальным, т.к. в базе данных на локальном компьютере все сохранялось в нормальной кодировке и через phpMyAdmin читались символы замечательно. Однако снова при переносе БД на сервер появились проблемы, теперь уже вместо кириллицы стоят знаки вопроса ? ? ? ? Замучался уже.. Кто с этим сталкивался и как решил проблемку?

    Конфигурация локального сервера:
    1. Windows XP SP2
    Apache 2.0
    PHP 5
    MySQL 4.1, кодировка UTF8 (насколько я знаю, MySQL 4.0 не поддерживает полностью UTF phpMyAdmin 2.6.4-pl1

    2. Пробовал на линуксе Ubuntu 5.10, результат тот же, конфигурация сервера:
    Apache 2.0
    PHP 5
    MySQL 4.1
    phpMyAdmin 2.6.2-Debian-3sarge1

    Хостинг FreeBSD 5.4
    Apache 2.0
    PHP 5
    MySQL 4.1, кодировка UTF8
    phpMyAdmin 2.6.4


  • 897
    1,616
    "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

    Не используйте Revo для "просто сайтов". Используйте Evo

    Who can defeat the Russian bear?

    aleksey.stepanov Reply #2, 5 years, 9 months ago

    Reply
    • Link to this post#2
    как я понял проблема возикает в момент переноса самой БД. смотри как у тебя файл *.sql формируется


  • 28814
    1,065
    Разработка сайтов и программных модулей на MODx.
    Опыт работы на MODx с 2005 года. Высокое качество. Дорого!
    Компания Baltic Design Colors: http://www.bdcolors.eu. ICQ 5414441.

    Документация:
    Wiki-учебник (RUS) | Wiki-учебник (ENG) | Основная документация (ENG) | MODx.ru - сайт русской поддержки | Удобный поиск по RU-сайтам о MODx

    Цикл статей на modx.ru:
    Как сделать сайт на MODx с нуля - пошаговое руководство

    FAQs:
    Как правильно задавать вопросы на форуме?
    Как восстановить забытый пароль? | Как разблокировать пользователей MODx?
    Как сделать регистро-независимый поиск? | Как передать данные в сниппет из URL?
    Как создать дополнительные поля для документов (TV)?

    suhinin Reply #3, 5 years, 9 months ago

    Reply
    • Link to this post#3
    Quote from: aleksey.stepanov at May 08, 2006, 07:33 AM
    смотри как у тебя файл *.sql формируется
    SQL файл формируется вроде бы нормально, т.е. кириллица так и отображается кириллицей. Подозреваю, что дело в том, что кодировка этого файла ANSI. Хотя в Notepad++ в формате кодировки стоит UTF8 без BOM и одновременно выбрана ANSI. Вот и не знаю, что думать Приложил файл, можете посмотреть на 508 строке, там кириллица нормально отображается..


  • 897
    1,616
    "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

    Не используйте Revo для "просто сайтов". Используйте Evo

    Who can defeat the Russian bear?

    aleksey.stepanov Reply #4, 5 years, 9 months ago

    Reply
    • Link to this post#4
    посмотрел он у тебя был в ANSI я взял банально его в UTF-8 перекодил.. попробуй загрузить на свой хостинг


  • 28814
    1,065
    Разработка сайтов и программных модулей на MODx.
    Опыт работы на MODx с 2005 года. Высокое качество. Дорого!
    Компания Baltic Design Colors: http://www.bdcolors.eu. ICQ 5414441.

    Документация:
    Wiki-учебник (RUS) | Wiki-учебник (ENG) | Основная документация (ENG) | MODx.ru - сайт русской поддержки | Удобный поиск по RU-сайтам о MODx

    Цикл статей на modx.ru:
    Как сделать сайт на MODx с нуля - пошаговое руководство

    FAQs:
    Как правильно задавать вопросы на форуме?
    Как восстановить забытый пароль? | Как разблокировать пользователей MODx?
    Как сделать регистро-независимый поиск? | Как передать данные в сниппет из URL?
    Как создать дополнительные поля для документов (TV)?

    suhinin Reply #5, 5 years, 9 months ago

    Reply
    • Link to this post#5
    Quote from: aleksey.stepanov at May 08, 2006, 07:48 AM
    посмотрел он у тебя был в ANSI я взял банально его в UTF-8 перекодил.. попробуй загрузить на свой хостинг
    К сожалению, я это уже пробывал. Скачал этот файл, который ты перекодировал и попробовал загрузить на хостинг, результат тот же самый - одни вопросы ? ? ? ? ? в базе данных и соответственно на сайте. Думаю, что действительно проблема возникает именно при импорте данных. Только вот как ее решить - не знаю Возможно это связано с настройками phpMyAdmin или самой БД, как думаешь?


  • 897
    1,616
    "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

    Не используйте Revo для "просто сайтов". Используйте Evo

    Who can defeat the Russian bear?

    aleksey.stepanov Reply #6, 5 years, 9 months ago

    Reply
    • Link to this post#6
    думаю если есть 100% уверенность в том что БД настроенно на UTF-8, то можно полагать что файл коверкаеться в момент загрузки. что может быть причиной?
    1. сам phpMyAdmin конвертит (настройки выставлены на win1251)
    2. Апачь коверкает (стоит какая-то принудительная переконвертация)

    второй вариант менее правдопадобен. имхо...

    у phpMyAdmin когда подключаешься к базе есть параметр установик кодировки. надо его курить.


  • 28814
    1,065
    Разработка сайтов и программных модулей на MODx.
    Опыт работы на MODx с 2005 года. Высокое качество. Дорого!
    Компания Baltic Design Colors: http://www.bdcolors.eu. ICQ 5414441.

    Документация:
    Wiki-учебник (RUS) | Wiki-учебник (ENG) | Основная документация (ENG) | MODx.ru - сайт русской поддержки | Удобный поиск по RU-сайтам о MODx

    Цикл статей на modx.ru:
    Как сделать сайт на MODx с нуля - пошаговое руководство

    FAQs:
    Как правильно задавать вопросы на форуме?
    Как восстановить забытый пароль? | Как разблокировать пользователей MODx?
    Как сделать регистро-независимый поиск? | Как передать данные в сниппет из URL?
    Как создать дополнительные поля для документов (TV)?

    suhinin Reply #7, 5 years, 9 months ago

    Reply
    • Link to this post#7
    УРАААА I DID IT Представьте, просидел несколько суток Значит так.. Опишу, что сделал. Дабы народу помочь, если кому понадобится, да и самому не забыть опосля
    1. Перед установкой MODx, ищем в папке install файл setup.sql и перед каждымyISAM добавляем DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci . Например, чтобы вместо:
    CREATE TABLE IF NOT EXISTS `{PREFIX}active_users` (
      `internalKey` int(9) NOT NULL default '0',
      `username` varchar(50) NOT NULL default '',
      `lasthit` int(20) NOT NULL default '0',
      `id` int(10) default NULL,
      `action` varchar(10) NOT NULL default '',
      `ip` varchar(20) NOT NULL default '',
      PRIMARY KEY  (`internalKey`)
    ) TYPE=MyISAM COMMENT='Contains data about active users.';
    

    получилось примерно так:

    CREATE TABLE IF NOT EXISTS `{PREFIX}active_users` (
      `internalKey` int(9) NOT NULL default '0',
      `username` varchar(50) NOT NULL default '',
      `lasthit` int(20) NOT NULL default '0',
      `id` int(10) default NULL,
      `action` varchar(10) NOT NULL default '',
      `ip` varchar(20) NOT NULL default '',
      PRIMARY KEY  (`internalKey`)
    ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci TYPE=MyISAM COMMENT='Contains data about active users.';
    


    P.S.: Проще всего использовать замену ") TYPE" на ") DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci TYPE"
    P.S.2: Таким образом мы принудительно заставляем базу данных использовать кодировку UTF8 независимо от того, какие настройки выставлены для нее по умолчанию.

    2. Находим в папке manager файл index.php. В нем находим (примерно 133 строка)
    // connect to the database
    if(@!$modxDBConn = mysql_connect($database_server, $database_user, $database_password)) {
    	die("<h2>Failed to create the database connection!</h2>. Please run the MODx <a href='../install'>install utility</a>");
    } else {
        mysql_select_db($dbase);
    }
    

    и заменяем на
    // connect to the database
    if(@!$modxDBConn = mysql_connect($database_server, $database_user, $database_password)) {
    	die("<h2>Failed to create the database connection!</h2>. Please run the MODx <a href='../install'>install utility</a>");
    } else {
        mysql_select_db($dbase);
        mysql_query("SET NAMES 'utf8';",$modxDBConn);
        mysql_query("SET CHARACTER SET 'utf8';",$modxDBConn);
        mysql_query("SET SESSION collation_connection = 'utf8_general_ci';",$modxDBConn);
    }
    


    3. Проделываем похожую процедуру с файлом manager/includes/extenders/dbapi.mysql.class.inc.php:
    Находим в файле dbapi.mysql.class.inc.php (примерно 90 строка, функция connect):
             
             if (!@ mysql_select_db($dbase)) {
                $modx->messageQuit("Failed to select the database '" . $dbase . "'!");
                exit;
             }
             $tend = $modx->getMicroTime();
    

    И заменяем на следующий код:
             if (!@ mysql_select_db($dbase)) {
                $modx->messageQuit("Failed to select the database '" . $dbase . "'!");
                exit;
             }
             mysql_query("SET NAMES 'utf8';", $this->conn);
             mysql_query("SET character_set_results = 'utf8';", $this->conn);
             mysql_query("SET collation_connection = 'utf8_general_ci';", $this->conn);
             $tend = $modx->getMicroTime();
    


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

    ВАЖНО: Сразу после установки системы вы попадаете в раздел настроек, где необходимо выбрать кодировку, которую будете использовать в системе. Выбирайте Unicode (UTF - utf-8.

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

    Так вот, проблема заключалась опять же в необходимости принудительно заставлять базу данных на хостинге работать с кодировкой UTF8. На данный момент я нашел пока единственное решение - это полученный дамп базы из phpMyAdmin редактировать вручную и проделывать то же самое, как я описывал в пункте 1:
    перед каждымyISAM добавляем DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    Хотя возможно, что есть более универсальный подход, даже почти уверен, что есть, поскольку базу данных объемом в несколько мегабайт мне просто страшно представить, как редактировать Вот если у кого есть дельные мысли на этот счет, буду очень рад
    Надеюсь, что все это я описал не зря и кому-то смог тоже помочь .

    P.S.: Сохраняя вложенность, приложил измененные файлы, о которых говорил выше по тексту. По идее, все, что требуется, перед установкой просто заменить ими имеющиеся директории. Прошу принять во внимание, что приложенные к сообщению файлы относятся к MODx версии 0.9.2.1. Поэтому в более новых версиях возможны какие-либо изменения в файловой структуре.


  • 897
    1,616
    "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

    Не используйте Revo для "просто сайтов". Используйте Evo

    Who can defeat the Russian bear?

    aleksey.stepanov Reply #8, 5 years, 9 months ago

    Reply
    • Link to this post#8
    матеро
    а все из-за того что БД по-умолчанию на cp1251 настроена?


  • 28814
    1,065
    Разработка сайтов и программных модулей на MODx.
    Опыт работы на MODx с 2005 года. Высокое качество. Дорого!
    Компания Baltic Design Colors: http://www.bdcolors.eu. ICQ 5414441.

    Документация:
    Wiki-учебник (RUS) | Wiki-учебник (ENG) | Основная документация (ENG) | MODx.ru - сайт русской поддержки | Удобный поиск по RU-сайтам о MODx

    Цикл статей на modx.ru:
    Как сделать сайт на MODx с нуля - пошаговое руководство

    FAQs:
    Как правильно задавать вопросы на форуме?
    Как восстановить забытый пароль? | Как разблокировать пользователей MODx?
    Как сделать регистро-независимый поиск? | Как передать данные в сниппет из URL?
    Как создать дополнительные поля для документов (TV)?

    suhinin Reply #9, 5 years, 9 months ago

    Reply
    • Link to this post#9
    а все из-за того что БД по-умолчанию на cp1251 настроена?
    В моем случае это обычно была кодировка latin1 и сравнение latin1_swedish_ci. Видимо влияют региональные настройки, что ли Особенно парило latin1_swedish_ci. Никак не мог от него избавиться


  • 17459
    254

    Lord Daedra Reply #10, 5 years, 8 months ago

    Reply
    • Link to this post#10
    В файле my.cnf прописать (это у нас, пропишите какие вам надо)

    [mysqld]
    old_passwords
    init-connect="SET NAMES cp1251"
    character-set-server=cp1251
    collation-server=cp1251_general_ci

    [client]
    default-character-set=cp1251


  • <
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • >



Actions

Login to Post

Other Support Options

To file a bug or make a feature request visit our issue tracker, or you can also purchase commercial support.

Love MODX?

If you build sites for a living with MODX or just love using it, why not give back?

Information

Posted in this thread:
Bic, BusyBee, Gentleman, Lord Daedra, Masterkey_SCR, Pisto Ganza, Plankton, Raid3r, Raito, Sedgar, Vadya corp., aleksey.stepanov, dimmon, dukeRD, hombre, kms_cms, r272488287, rogalsky, suhinin, tayzer, webartel, websbart, wolgri, yurican

 
Back to Top

MODX Global HQ

1333 N Stemmons Fwy, Ste 110
Dallas, TX 75207
United States

+1 (469) 777-MODX (6639)

The MODX Company

  • Contact
  • Media Center
  • Work at MODX
  • Wall of Fame
  • The MODX Blog

Sponsors

SoftLayer Firehost: Secure Cloud Hosting

Stay Connected

Read our previous email newsletters.

Twitter Facebook Google+ LinkedIn github Feeds

Privacy Policy | Terms of Service | Pixels by AKTA Web Studio© 2005-2012 MODX. All rights reserved. Trademark Policy