The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Решение проблем с кодировкой в MySQL 4.1.x (mysql cp1251 charset rus)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: mysql, cp1251, charset, rus,  (найти похожие документы)
From: Игорь. В.Борисов aka WingMan <igboris@yandex.ru.> Date: Mon, 15 Nov 2006 14:31:37 +0000 (UTC) Subject: Решение проблем с кодировкой в MySQL 4.1.x Оригинал: http://www.nclug.ru/content.php?article.92 Началось все внезапно. Беды не предвещало ничего... Принесли мне дамп БД с просьбой залить все это счастье в базу. Создал я базу через PHPMyAdmin, импортировал дамп в свежее созданную базу, проверил что и как записалось, возрадовался и успокоился... Звонит мне клиент, чей дамп был, и говорит - погляди-ка что показывает на страничке (оговорюсь - дамп был от борды IPB- Invision Power Board, форум короче)... Смотрю - действительно неважно: везде где кириллица вместо текста вопросительные знаки (?????????? ?? ?? ????? ??? ???? e t.c.). С PHPMyAdmin смотрю-все в порядке, а вот борда... Вот тут и началось... Стал я бороться с кодировкой... Скажу сразу - совокуплялся я с конфигами трое суток кряду (с небольшим перерывом на сон). Врагу бы не пожелал. Не стану описывать мое эмоциональное и психическое состояние на тот момент, перейдем к решению данной проблемы... Во первых, просмотрел существующую кодировку сервера мускуль, исправил все на ср 1251, проблема не решилась. Во вторых, в php.ini default_charset поставил тоже 1251. Далее (как рекомендовал мне на форуме edge) в my.cnf в разделе [mysqld] прописал init-connect="SET NAMES cp1251"... Но все осталось на месте... Никаких намеков на правильную работу. Я был в отчаянии. Далее, чисто случайно, в качестве эксперимента (а что еще оставалось делать?) я ╚зарезал╩ права (да, да - именно ущемил в правах пользователя этой БД) и... о чудо! Все заработало! Как я позже понял - init-connect="SET NAMES cp1251" НЕ ДЕЙСТВУЕТ на пользователя БД root и других пользователей у которых права на базу выставлены как GRANT ALL PRIVELEGES ON...... (полагаю, сделано это для того, что если какой-нибудь пользователь напортачил с базой, пользователь root или другой пользователь со всеми правами для данной БД смог исправить ╚косяки╩). Ну и в php.ini установка нужной кодировки помогла. Резюмируя: Если возникает проблема подобного рода выполняем следующие действия: 1. Проверяем кодировку сервера MySQL (SHOW VARIABLES LIKE `char%'); 2. Устанавливаем нужную кодировку: SET имя_переменнной= ... SET character_set_clien cp1251 SET character_set_connection cp1251 SET character_set_database cp1251 SET character_set_results cp1251 SET character_set_server cp1251 SET character_set_system utf8. Последнюю переменную мне поменять не удалось, видимо это и невозможно, т.к. сервер в ответ на мою попытку SET character_set_system= cp1251, отвечал что мол ERROR 1193 (HY000): Unknown system variable 'character_set_system' 3. В my.cnf в разделе [mysqld] прописываем init-connect="SET NAMES cp1251" 4. В /etc/php.ini - выставляем: default_charset = "cp1251" - это тоже немаловажно, так как обработка базы (в моем случае) проводилась интерпретатором PHP. 5. И последнее - пользователю БД выставляем следующие права: ВЫБОР ДАННЫХ ТАБЛИЦ ВСТАВКА ДАННЫХ ТАБЛИЦ ОБНОВЛЕНИЕ ДАННЫХ ТАБЛИЦ УДАЛЕНИЕ ДАННЫХ ТАБЛИЦ СОЗДАНИЕ ТАБЛИЦ СБРОС ТАБЛИЦ Этих прав пользователю - хватит сполна для работы с БД. Таким образом, проблема была решена. Пишу эту статью, так как тема актуальна, и, надеюсь, что на эти грабли Вы уже не наступите.
Комментарий от bullet: по-моему мнению статья описывает сугубо частный случай, mysql+phpmyadmin+ipb... в общем случае задача решается: echo "create database my_db" | mysql -uroot mysql --default-character-set=cp1251 -uroot -Dmy_db < my_dump.sql Комментарий от Geosan Я нашел все нужное вот тут http://phpclub.ru/faq/wakka.php?wakka=Mysql41Rus&v=eum У меня не получалось из foxpro грузить мускуль, помогла вот эта строчка Начиная с версий 4.1.15 и 5.0.13 добавить в секцию [mysqld] или [server] файла my.cnf/my.ini параметр skip-character-set-client-handshake. Этот параметр заставляет сервер игнорировать кодироку, посылаемую клиентом, и использовать указанную серверу. В примере конфигурации ниже этот параметр уже есть.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Max Glekov (?), 23:38, 03/01/2007 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Спс. Оч.хорошая статья! Помогла решить срочную проблему.
     
  • 1.2, vertur (?), 21:18, 26/02/2007 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    надо было везде utf8 юзать, проблем не было бы.
     
  • 1.3, тимофей (?), 14:47, 27/03/2007 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    обьясните где лежит этот (много где упомянутый my.cnf) ну хоть убейте не нашёл...

    у меня апач 2.58, php5, MySQL 4.1

    и если возможно, обьясните как составить запрос к базе на изменение кодировок...

     
  • 1.5, sekrett (?), 01:08, 01/06/2007 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Только этой строчки вполне достаточно, если на момент компиляции чарсет и колейшн были указаны правильно:
    init-connect="SET NAMES cp1251"
    Для рута действительно не действует. Спасибо за статью, сыкономил время.
     
  • 1.6, Elias (?), 16:33, 09/07/2007 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Попробовал Ваш метод - помогло!!!
    у меня на php 4.4 все работало, а на 5 не захотело.
    спасибо за статью.
     
  • 1.7, andrew (??), 10:10, 19/07/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    +1
    Благодарю, работает!!!
     
  • 1.8, BezTain (?), 00:46, 25/10/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо большое! Слов нет, спас!
     
  • 1.9, Никита (??), 03:23, 29/11/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Автору большое спасибо и респект!
     
  • 1.10, Gleb (?), 15:28, 05/12/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Автору и Geosan респект.
    Совместив их указания заставил нормально понимать кириллицу Mysql 5.0
     
  • 1.11, lucky_777 (?), 16:51, 22/01/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    +1 Огромный респект!!! Про прова ну это надо было додуматься...
     
  • 1.12, Иван (??), 17:25, 19/02/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Также хорошая статья по этому поводу находится здесь, мне помогла именно она http://novikov.ua/articles/web-adaptation/6766/
     
  • 1.13, Netch (?), 14:11, 03/03/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Наступив на те же грабли, хочу отметить ещё одну особенность работы с кодировками. Обращайте внимание в какой кодировке находится ваш исходный РНР-код. I.e. если вы выбрали кодировку ср1251, тогда и файл сценария переведите в неё же: 1251 (ANSI - Cyrillic).

    Благодарность авторам.

     
  • 1.14, usupov (?), 16:40, 21/03/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    SET имя_переменнной= ...
                SET character_set_clien cp1251
                SET character_set_connection cp1251
                SET character_set_database cp1251
                SET character_set_results cp1251
                SET character_set_server cp1251
                SET character_set_system utf8.
    не понадобилось...
    изменил php.ini, my.ini.
    добавил юзер с огран. правами  и все сработало.
    Спасибо всем..  Батыр с Кыргызстана
     
  • 1.15, Egor (??), 15:10, 16/04/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Мой рецепт:

    1. Система на windows, mysql4.1 (default charset=utf8), php 5

    2. Удостовериться что кодировка в dump'e действительно cp1251 (в моём случае было в UTF8, хотя все таблицы создавались с указанием cp1251, Т.е. был кривой dump. Перекодировал с помощью ultraedit32).

    3. Сверху в dump'e прописать:

    SET character_set_client = cp1251;
    SET character_set_connection = cp1251;
    SET character_set_database = cp1251;
    SET character_set_results = cp1251;
    SET character_set_server = cp1251;
    SET collation_connection='cp1251_general_ci';
    SET collation_server='cp1251_general_ci';

    4. Создать таблицу:
    create database table_name DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

    5. Импортировать данные

    6. в PHP скриптах:
    $r = mysql_connect($host,$user,$pass);
    mysql_query('SET NAMES "cp1251"', $r);
    mysql_query("SET collation_connection='cp1251_general_ci'", $r);
    mysql_query("SET collation_server='cp1251_general_ci'", $r);
    mysql_query("SET character_set_client='cp1251'", $r);
    mysql_query("SET character_set_connection='cp1251'", $r);
    mysql_query("SET character_set_results='cp1251'", $r);
    mysql_query("SET character_set_server='cp1251'", $r);

     
  • 1.16, den (??), 12:37, 05/05/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    всё описанное пробовал, у меня на 5 не работает
     
  • 1.17, benefactor (?), 15:46, 26/07/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Добавил юзера и все ОК.
    Благодарю за статью!
     
  • 1.18, kovshenin (?), 10:43, 24/10/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо, долго мучался и обсуждал этот вопрос на своем блоге - http://blog.kovshenin.com особенно темы касающиеся кодировки при выборе данных из базы MySQL и передачи по AJAX.. И всё таки вы предложили отличный вариант. Спасибо еще раз!
     
  • 1.19, Inna (?), 21:49, 28/10/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Большое спасибо за статью! Действительно помогла! :)))
     
  • 1.20, Kontrochka (?), 13:04, 04/02/2009 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    Для TorrentPier Meithar он на форуме от phpbb2 Я не очень во всём этом разбира... весь текст скрыт [показать]
     
  • 1.22, Yoshop.ru (?), 18:19, 18/04/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Описанные выше действия реально помогли, огромное спасибо автору!!!
     
  • 1.23, Denis (??), 11:51, 02/06/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо! Очень помогла статья! Все получилось.
     
  • 1.24, dad (??), 16:58, 16/06/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Отличная статья. Помогла решить проблему, которая была из-за пользователя с неограниченными правами.

    Для utf8 сделал следующее:
    В файле /etc/mysql/my.confришлось подправить
    1) default-character-set = utf8
    2) init-connect = "SET NAMES utf8"
    3)Задал пользователя для скриптов с ограниченными правами.

    Спасибо автору, всем пореже находить грабли.

     
  • 1.25, Алена (??), 17:27, 10/07/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Огромное спасибо за информацию! Автору респект!
    Уж и не надеялась разобраться с этой проблемой... А тут такая замечательная статья.
     
  • 1.26, Алексей (??), 11:40, 11/09/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо! Большое спасибо! Огромное спасибо!
     
  • 1.27, Alex (??), 13:34, 05/10/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Возникла вот такая проблемка:
    передел все кодировки в мускуле на cp1251,
    отобрадение данных базы проходит нормально, но  если на старнице указать <meta ... Windows-1251">, то тут еж все рушится, а если не указать, тогда родной текст страницы кривой.
    Что делать, подскажите...
     
  • 1.28, Алексей (??), 02:35, 29/10/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Один в один проблема была с mysql 5, из-за полных прав не выполнялся SET NAMES cp1251 из конфига.
    Огромный респект автору, 3 часа провозился, почти отчаялся.
     
  • 1.29, chelsea (?), 12:48, 14/02/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Помогла статейка. Спасибо.
     
  • 1.30, Serega (??), 01:52, 23/04/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо!!!)))
     
  • 1.31, andrew (??), 01:54, 20/09/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо
     
  • 1.32, АРСЕН (?), 08:18, 01/12/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо большое Вам, мне очень помогла ваша статья.
     
  • 1.33, modemaizer (?), 14:39, 06/10/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо! Тоже помогло!
     
  • 1.34, XP (?), 11:20, 14/11/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    у меня выводится все нормально, но в MySQL Workbench (MySQL 5.5 под WinXP) не принимается кириллица в BLOB-поле... Приходится загружать инфу из текстового файла.
     
  • 1.35, SD (?), 20:38, 25/03/2012 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Низкий поклон и огромная благодарность Вам за статью!
     
  • 1.36, politovskiy (?), 23:00, 21/10/2012 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Благодарю, очень помогло. Спасибо огромное за статью!!! С уважением.
     
  • 1.37, merlin.metso (ok), 01:55, 24/11/2013 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Автору СПАСИБО, от души прямо
     
  • 1.38, Станислав (??), 21:45, 03/12/2014 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо большое!
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:




      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor