The OpenNET Project / Index page

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

Решение проблем с кодировкой в 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

    Я не очень во всём этом разбиралась на тот момент, когда мне надо было вернуть базу большого размера и с плохо сохранённой кодировкой, а может просто хостинги были с разной кодировкой и сайт встал криво, без русских буковок. Тех-помощь залила мне мою базу на половину, сама я так и не смогла тоже её залить из-за большого размера. Вобщем подумала я, если возможно файлы языка переделать в нужной кодировке, почему же мне не попробовать тоже самое проделать с таблицами базы. Раз уж сама база теперь на многих хостингах заливается только при UTF8 кодировке, то при заливки отдельных таблиц, можно выбрать нужную кодировку. Пришлось похимичить. Пересмотрела каждую таблицу особенно это касается таблиц тем, писем, заходила в экспорт этих таблиц, нажимала кнопочку *ОК* и смотрела внутренности, копировала ероглифы, создавала на компьютере такую же таблицу, вставляла скопированное, потом заливала таблицу на фтп, открывала её в диспечерской файлов в кодировке cp1251, копировала уже нормальные русские буквы, затем открывала этот же файл в кодировке UTF8, вставляла свой нормальный текст и сохраняла, копировала назад на компьютер, потом в ми админ удаляла эту таблицу и импортировала уже свою. При импорте тоже можно выбрать кодировку, но я не трогала это окошко, как там выставлено UTF8, так и оставила, так как файл специально сохранила в этой кодировке, так вот таблицы все нужные сделала таким образом и совсем не мешает то, что сравнения в этих таблицах так и остались cp1251_general_ci. Всё было спасено к сожелению поздно, только через год, люди больше не вернулись, так как трекеров расплодилось уйма, поэтому и решила поделиться, чтобы всё сделать быстро и без потерь. Да, забыла сказать, так как база не залилась, то я на компьютере открыла базу и с неё выбирала нужные таблицы,создавала их, удаляла их в ми админ и импортировала свои, тогда уже нажимала на экспорт этих таблиц и всё остальное, что выше описано.

     
  • 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:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру