Пользователь 76561 Посетитель Сообщений: 69 |
Продукт — «Портал государственной организации» Кодировка таблицы b_perf_cluster (cp1251) отличается от кодировки базы (utf8) Еще есть 7 строк вида: Сравнение (Collation) для таблицы «b_perf_cluster» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci) и 266 строк вида: Сравнение (Collation) для таблицы «b_adv_banner» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci) Всего таблиц 275 b_iblock_offers_tmp когда возникли ошибки не известно Вопросы Заранее спасибо |
Пользователь 76561 Посетитель Сообщений: 69 |
|
Администратор Сообщений: 137 |
обратитесь к хостерам, пусть выполнят необходимые запросы и перекодируют все таблиц в нужную кодировку. Руководитель службы технической поддержки |
Пользователь 76561 Посетитель Сообщений: 69 |
Сервер у меня свой, перекодировать таблицы я могу сам. Хотелось бы понять что вызывает смену кодировки во ВСЕХ таблицах. Устанавливался продукт под кодировкой UTF-8. |
Пользователь 76561 Посетитель Сообщений: 69 |
Продукт недавно развернули, сейчас идет настройка. Не поздно переустановить. Но есть ли смысл? |
Пользователь 12014 Эксперт Сообщений: 1000 |
Достаточно перекодироват таблицы Не жмись, кликай «Мне нравится» на сообщении |
Пользователь 76561 Посетитель Сообщений: 69 |
Перекодировать таблицы достаточно, а что необходимо сделать или чего нельзя делать, чтобы кодировка произвольно не изменялась |
Пользователь 90944 Посетитель Сообщений: 79 |
Мужики подскажите как перекодировать базу,у меня такая же ерунда вышла.Переносил сайт с веб окружения на виртуалку и вот тебе на Сравнение (Collation) для таблицы «b_adv_banner» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci) и так далее……. |
Администратор Сообщений: 1193 |
ALTER DATABASE XXX DEFAULT COLLATE utf8_unicode_ci; |
Пользователь 34561 Постоянный посетитель Сообщений: 287 |
#10 5 29.07.2011 10:45:40 Было то же самое. Вот ответы техподдержки: Посмотреть параметры кодировки БД можно следующим запросом (Настройки — Инструменты — SQL запрос): Все параметры, кроме параметра character_set_filesystem необходимо установить в соответствие с кодировкой сайта. Это можно сделать в файле after_connect.php (bitrixphp_interfaceafter_connect.php), например: Затем проверить кодировку в проверке сайта в «Тестировании конфигурации» (Настройки — Инструменты — Проверка сайта). Для смены кодировки таблиц выполните, пожалуйста, запрос для каждой таблицы: Проблема решается добавлением: Если к таблицам «b_search_phrase» и «b_search_suggest» будут ошибки, которые нельзя будет исправить (например восстановить таблицы), тогда мы рекомендуем Вам удалить модуль Поиск (Настройки — Настройки продукта — Модули) без сохранения данных в таблицах базы данных. Затем заново установите модуль Поиск, проведя переиндексацию сайта. После выполнения всех процедур все выровнялось. Рекомендую. |
Пользователь 90944 Посетитель Сообщений: 79 |
#11 0 29.07.2011 13:24:24
Большое спасибо,Помогло. |
||
Пользователь 90944 Посетитель Сообщений: 79 |
#12 0 29.07.2011 13:35:03
У меня еще одна проблема возникла,я думаю что данного характера,перенес сайт веб окружения на вертуалку,сначала были ошибки с кодировкой(это исправил)теперь обнаружил что часть портала а именно Интранет встал коряво,шаблон не тот что был,да и информация которая была отображается всего лишь на 30 процентов…было в базе забито около 100 сотрудников а после переноса стало человек 10 и т.п. |
||
Пользователь 871 Посетитель Сообщений: 70 |
#13 3 16.09.2011 15:17:58 QODA, спасибо
помогло ) |
||
Пользователь 49702 Заглянувший Сообщений: 10 |
#14 0 19.09.2011 10:46:50
Огромное спасибо! Решение помогло! |
||
Пользователь 109077 Заглянувший Сообщений: 1 |
#15 0 30.11.2011 15:49:58 При проверке сайта после восстановления из бэкапа вылезли следующие ошибки: Кодировка соединения (check_mysql_connection_charset): Fail Дописывание $DB->Query(‘SET collation_connection = «utf8_unicode_ci»‘); в after_connect приводит к тому, что нельзя зайти даже на морду сайта. Где ещё можно копать? |
Пользователь 85035 Заглянувший Сообщений: 32 |
#16 0 14.12.2011 03:00:16 попробуй еще добавить в начало Вот мой файл after_connect.php
4, повторяем Тестирование конфигурации. Все ок! Удачи:) |
||||||
Пользователь 99542 Заглянувший Сообщений: 7 |
#17 0 15.12.2011 17:35:57 Скачал виртуальную машину. Сравнение соединения с базой данных должно быть utf8_unicode_ci, текущее значение: utf8_general_ci. Раньше такого не было. |
Пользователь 63180 Эксперт Сообщений: 618 |
#18 3 02.08.2012 17:04:10 а можно сменить кодировку всем таблицам сразу ) SELECT CONCAT(‘ALT ER TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;’) as sqlcode FROM `information_schema`.`TABLES` t (вместо db_name) имя вашей базы в результате запроса вы увидете пару сотен строк )) типа
затем ответ копируете и все эти строки бахаете как новый запрос ) вот и всё) для утф посдатвляете utf8 COLLATE utf8_general_ci; |
||
Пользователь 576649 Заглянувший Сообщений: 1 |
#19 0 29.01.2017 22:58:19 Кодировки таблиц имеют ошибки 2017-Jan-29 22:51:26 Кодировки таблиц в БД (check_mysql_table_charset): Fail помогите разобраться |
Пользователь 34550 Эксперт Сообщений: 1579 |
#20 0 30.01.2017 10:09:39 вам же все написано. |
Пользователь 307442 Заглянувший Сообщений: 10 |
#21 0 12.02.2019 11:46:47 А у меня тоже проблем но на команду ALT ER DATABASE XXX DEFAULT COLLATE utf8_unicode_ci; приходит ответ [1044] Access denied for user ‘логин-базы_bitrix’@’localhost’ to database ‘XXX’! доступ запрещен как мне быть |
В связи с тем, что довольно много людей обращается с просьбой помочь исправить проблему с кодировками MySQL, решил написать статью с описанием, как «лечить» наиболее часто встречающиеся случаи.
В статье описывается не то, как первоначально правильно настроить кодировки MySQL (об этом уже довольно много написано), а о случаях, когда есть довольно большие таблицы с неправильными кодировками и нужно всё исправить.
Самое плохое в неправильно настроенных кодировках — то, что зачастую проблему сложно обнаружить, и с первого взгляда может казаться, что сайт работает правильно, и никаких проблем нет.
Небольшое отступление. Sypex Viewer
В какой-то момент надоело отправлять людей в громоздкий phpMyAdmin, и была написана крошечная утилитка Sypex Viewer. Она представляет собой один PHP-файл, использует современные Web 2.0 технологии AJAX, JSON и другие. Основные задачи, которые ставилась при создании — минимальный вес, и максимальное удобство и скорость работы. В дальнейшем в примерах будут скриншоты из неё, но все те же действия можно сделать и в phpMyAdmin.
Данные в cp1251 таблицы в latin1
Наверное, самая популярная проблема. Когда данные в кодировке cp1251 (Windows-1251), а у таблиц указана кодировка по умолчанию latin1. Такие ситуации возникают в следующих случаях:
- при неграмотном обновлении с версии MySQL меньше 4.1 на более новые;
- очень часто возникает в «буржуйских» скриптах, которых вполне устраивает кодировка по умолчанию, и они «забывают», что неплохо бы указывать кодировку, как таблиц, так и соединения;
- также бывают случаи, когда переезжают с одного сервера (у которого установлена дефолтная кодировка cp1251, в частности, так сделано в Денвере) на другой (у которого стоит стандартная кодировка latin1).
В результате на сайте вроде как всё нормально, но если посмотреть в Sypex Viewer, то русские символы будут выглядеть как «кракозябры» (как их обычно называют пользователи).
В статье я рассмотрю один из вариантов преобразование кодировок с помощью бесплатного php-скрипта Sypex Dumper, в качестве готового решения.
- На вкладке «Экспорт» выбираем нужные таблицы.
- Кодировка должна быть auto (остальные параметры неважны, можно комментарий добавить, например, «Дамп перед исправлением кодировки»).
- Нажимаем «Выполнить». Теперь у нас есть бэкап (его в любом случае желательно делать при любых преобразованиях базы данных).
- Переходим на вкладку «Импорт»
- Выбираем только что сделанный файл бэкапа.
- Выбираем кодировку cp1251 и помечаем опцию «Коррекция кодировки».
- Нажимаем «Выполнить».
- Вот и всё заходим в Sypex Viewer, чтобы убедиться, что русские символы выводятся корректно.
Данные и таблицы в utf8, но кодировка соединения latin1
Теперь рассмотрим более запущенный случай. Набирающая популярность в последнее время проблема, в связи с повальным увлечением UTF-8. Создатели софта стали переводить свои детища на UTF-8, но и тут не всё так гладко, как хотелось бы.
Возникает проблема в основном в случае, когда у таблиц указана кодировка UTF-8, данные в UTF-8, но кодировка соединения установлена по умолчанию latin1 (типичный пример, vBulletin 4, хоть там и есть в конфигах настройка кодировки соединения, но она закомментирована по умолчанию).
В результате в MySQL присылаются данные в UTF-8, но поскольку указана кодировка соединения latin1, то MySQL пытается преобразовать данные из latin1 в UTF-8. В итоге русские символы выглядят так:
Ситуация более запущенная, но исправляется проблема почти также, как в первом случае, только в пункте 2 нужно выбрать кодировку latin1, а в пункте 6 нужно выбрать utf8 кодировку.
Изменение кодировки
Также часто встречающаяся проблема преобразования кодировки из cp1251 в UTF-8. До выполнения этого шага обязательно убедитесь, что русские символы у вас правильно показываются в Sypex Viewer или phpMyAdmin, если это не так, то предварительно исправьте кодировку.
Итак, опять заходим в Sypex Dumper.
- Во вкладке «Экспорт» выбираем нужные таблицы.
- Устанавливаем кодировку, в которую хотите преобразовать таблицы, в данном случае utf8.
- Нажимаем «Выполнить».
- После чего заходим в «Импорт» и выбираем нужный файл.
- Выставляем кодировку utf8 и опцию «Коррекция кодировки».
- Нажимаем «Выполнить».
- Вот и всё таблицы в UTF-8. Не забываем, что нужно еще установить кодировку соединения, сконвертировать ваши скрипты и шаблоны в UTF-8, выставить правильную кодировку в заголовках.
Кодировка соединения
Не забываем, что после исправлений кодировки, нужно убедиться, что ваши скрипты используют правильную кодировку соединения (в принципе, это будет сразу видно, они будут неправильно показывать русские символы без нужной кодировки соединения). У некоторых она выставляется в настройках, в некоторых придется добавить самостоятельно.
Для чего достаточно пройтись поиском по файлам, и найти где вызывается функция mysql_connect (или mysqli_connect). После этой строки нужно добавить строку которая укажет кодировку соединения.
mysql_query("SET NAMES 'cp1251'");
Где вместо cp1251, указать нужную кодировку соединения.
Не забывайте перед преобразованиями кодировок делать бэкап, тут как с презервативами, лучше пусть он будет и не понадобится, чем когда понадобится — его не будет.
P.S. Спасибо Шортикам за веселый контент для примеров.
Проблемы с кодировкой на сайте часто встречаются после миграции с устаревшего серверного ПО (например, версии PHP) на новое.
Например, кодировка 1251 неактуальна для PHP старше версии 5.6. В связи с чем требуется изменение кодировки на UTF-8, которая является стандартом для последних версий PHP.
Если ваш сайт до миграции на наш хостинг работал в кодировке 1251, то при проверке системы вы можете видеть замечание: «Сайт работает в однобайтовой кодировке». Для исправления ситуации потребуется конвертировать сайт в UTF-8 или сделать изменения PHP-обработчика под кодировку 1251.
Следуйте шагам:
Исправьте настройки базы данных из панели 1С Битрикс в случае, если на странице /bitrix/admin/site_checker.php выводится ошибка: Ошибка! Кодировка базы (utf8) отличается от кодировки соединения (cp1251). [ Исправить ]
Если операция завершилась неуспешно, то повторно повторите исправление.
В редких случаях требуется ручное исправление из phpMyAdmin:
В панели хостинга в разделе «базы данных» перейдите в базу данных вашего сайта. После редиректа в phpMyAdmin войдите в раздел «операции» и в блоке «сравнение» выберите «utf-8_general_ci». Нажмите кнопку «вперед».
Редактирование php.ini для выбранной версии режиме PHP вашего сайта:
Убедитесь, что в настройках php.ini для выбранной версии PHP вашего сайта установлены значения:
Для варианта конвертации в utf-8:
mbstring.func_overload = 2
mbstring.internal_encoding = utf-8
default_charset = «utf-8»
Для варианта без конвертации (остается кодировка 1251):
mbstring.func_overload = 0
mbstring.internal_encoding = cp1251
default_charset = «cp1251»
Для однобайтовой кодировки (1251) также потребутеся отключить кодировку UTF-8 в панели хостинга в разделе «WWW-домены»:
Далее необходимо привести настройки согласно требуемой кодировке в файлах системы 1С Битрикс:
Для варианта корвертации в utf-8:
В /bitrix/php_interface/dbconn.php должно быть значение: define(‘BX_UTF’, true);
В /bitrix/.settings.php должно быть значение: ‘utf_mode’ => array (‘value’ => true, ‘readonly’ => true,),
Для варианта без конвертации (остается кодировка 1251):
В /bitrix/php_interface/dbconn.php полностью удалить значение: define(‘BX_UTF’, true);
В /bitrix/.settings.php должно быть значение: ‘utf_mode’ => array (‘value’ => false, ‘readonly’ => true,),
Mysql поддерживает много кодировок и это нередко является головной болью для программистов. Самая частая проблема — кракозяблы вместо русского текста. Это происходит из за того, что текст либо лежит на сервере, либо отдается клиенту в неверной кодировке. Последнее(а иногда и первое) решается проще всего. Устанавливаем кодировку соединения (в utf8 в примере) сразу после установления соединения
mysql_set_charset(‘utf8’); // или mysql_query(‘SET NAMES «utf8″‘); |
Хуже, когда скрипт отдает в базу, данные в верной кодировке, а в ответ получаем кракозяблы или вопросики. Или когда часть таблиц в верной кодировке, часть нет.. В таких случаях придется разбираться детально.
mysql_query(«SHOW VARIABLES LIKE ‘char%'» ); /* character_set_client: latin1 character_set_connection: latin1 character_set_database: utf8 character_set_filesystem: binary character_set_results: latin1 character_set_server: cp1251 character_set_system: utf8 character_sets_dir: usrlocalmysql-5.1sharecharsets */ |
Этот запрос обязательно проверять в самом скрипте, а не в phpmyadmin, где могут быть установлены другие параметры
character_set_client
— кодировка, в которой данные будут поступать от клиентаcharacter_set_connection
— по умолчанию для всего, что в рамках соединения не имеет кодировкиcharacter_set_database
— кодировка по умолчанию для базcharacter_set_filesystem
— кодировка для работы с файловой системой (LOAD DATA INFILE, SELECT … INTO OUTFILE, и т.д.)character_set_results
— кодировка, в которой будет выбран результатcharacter_set_server
— кодировка, в которой работает серверcharacter_set_system
— идентификаторы MySQL, всегда UTF8character_sets_dir
— папка с кодировками
По умолчанию после установки mysql сервер, который устанавливается ленивым хостеромадмином имеет кодировку latin1. Соответственно указанные выше глобальные переменные будут в latin1. Базы соответственно по умолчанию и таблицы так же. И именно на это стоит обратить в самом начале обратить внимание, чтобы проблемы не всплывали позднее.
В идеальном варианте, нам следуетпривести все отмеченные цветом кодировки к единому значению. Тогда мы просто будем избавлены от мелких ошибок с кодировкой. Фактически, если мы работаем с хостингом, то на (3) и (6) мы повлиять не сможем. Но и это не страшно если настроены остальные три параметра. Mysql умет перекодировать на лету если правильно настроена кодировка соединения.
Ну и наконец, основной вопрос, что делать если одна из mysql таблиц(или несколько) в неверной кодировке и на сайте видны кракозяблывопросики?
1. Выяснить кодировку таблицы.
mysql > SHOW CREATE TABLE `files` ————————————————————————— CREATE TABLE `files` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `iNode` int(10) unsigned NOT NULL, `pid` int(10) unsigned NOT NULL, `sName` varchar(128) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `sTitle` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id`), KEY `iNode` (`iNode`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
В этой таблице поле sName в кодировке latin1, если у нас соединение в другой кодировке, то мы увидим кракозябры.
2. Поэтому дальше проверим кодировку соединения, sql запросом SHOW VARIABLES LIKE ‘character_set_client’. Замечу, что php функция mysqli_client_encoding(), нам не подойдет, так как она отображает кодировку только на момент соединения.
3. Если кодировка соединения не совпала с кодировкой одного из полей таблицы, то 2 очевидных варианта.
Если у нас все таблицы в одной кодировке, то проще поменять кодировку соединения .
А как исправить неверную кодировку поля таблицы?
Для этого выполним 2 запроса
ALTER TABLE files CHANGE sName sName BLOB; ALTER TABLE files CHANGE sName sName VARCHAR(128) CHARACTER SET utf8; |
Нельзя обойтись только вторым запросом. Важно выполнить оба. Первый преобразовывает данные в двоичные, второй запрос, преобразовывает данные в строковые сменив кодировку.. Т.е. по сути мы не измениили двоичные данные, мы изменили правило формирования символов. Если бы мы попробовали обойтись только вторым запросом, то получили бы ошибочный набор.
Страницы 1 2 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Лента темы в RSS
Сообщения с 1 по 25 из 26
1 2012-12-15 03:03:40
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Тема: Изменение кодировки таблиц с cp1251 на utf8
Здравствуйте! Как изменить кодировку таблиц в phpMyAdmin с cp1251_general_ci на utf8_general_ci?
Исходные данные:
MySQL
Сервер: mysql via TCP/IP
Версия сервера: 5.1.41-log
MySQL-кодировка: UTF-8 Unicode (utf8)
Веб-сервер
Apache/1.3.37 (Unix) PHP/5.2.10 mod_ssl/2.8.28 OpenSSL/0.9.7e-p1
Версия MySQL-клиента: 5.1.36
PHP расширение: mysql
Основные настройки
Сопоставление соединения с MySQL utf8_general_ci
2 Ответ от Hanut 2012-12-15 08:49:14
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Самый простой способ — это сохранить дамп базы данных в .sql файл, затем открыть этот файл в редакторе (рекомендую Notepad++) и поменять во всех таблицах кодировку с cp1251 на utf8, а так же все сравнения с cp1251_general_ci на utf8_general_ci. Затем импортируйте дамп обратно. Обратите внимание, что если в дампе есть строка SET NAMES cp1251, то ее тоже надо поправить на SET NAMES utf8.
3 Ответ от Маверик 2012-12-16 00:27:46 (изменено: Маверик, 2012-12-16 00:31:12)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
У меня в таблицах «кракозябры» и все сравнения с cp1251_general_ci это означает, что кодировка таблиц в cp1251? Как точно узнать в какой кодировке таблицы базы данных?
У меня есть небольшое сомнение хотелось бы его развеять.
Я правильно определ причину появления «кракозябр» в таблицах базы данных?
4 Ответ от Маверик 2012-12-16 00:30:33 (изменено: Маверик, 2012-12-16 00:32:33)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
У меня размер базы 180 МБ, а в phpMyAdmin можно импортировать 64 МБ. Как быть?
5 Ответ от Hanut 2012-12-16 12:15:20
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Маверик сказал:
У меня в таблицах «кракозябры» и все сравнения с cp1251_general_ci это означает, что кодировка таблиц в cp1251? Как точно узнать в какой кодировке таблицы базы данных?
Покажите как в phpMyAdmin выглядят крякозябры, какая кодировка таблицы и какая кодировка страниц сайта.
Маверик сказал:
У меня размер базы 180 МБ, а в phpMyAdmin можно импортировать 64 МБ. Как быть?
Импортируйте из каталога, или разбейте дамп по таблицам.
В конфигурационный файл phpMyAdmin (config.inc.php) добавьте строку:
$cfg['UploadDir'] = './upload/';
Создайте в корне phpMyAdmin каталог upload и загрузите в него дамп, после чего он появится на странице импорта в выпадающем списке. Таким образом можно импортировать дампы практически любого размера.
6 Ответ от Маверик 2012-12-17 03:56:27
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Hanut сказал:
Покажите как в phpMyAdmin выглядят крякозябры, какая кодировка таблицы и какая кодировка страниц сайта.
Вот так выглядят:
Таблицы базы данных.
Таблица post.
Как посмотреть какая кодировка таблицы и какая кодировка страниц сайта?
7 Ответ от Hanut 2012-12-17 08:33:29
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Судя по картинкам, кодировка таблиц у вас cp1251, а кодировка сайта utf8. Для перекодирования надо иметь доступ к консоли на сервере. Если доступ к консоли имеется, то выполните команду (вместо pass пропишите пароль пользователя root, вплотную к ключу -p):
mysqldump db_name table_name -uroot -ppass --default-character-set=cp1251 > dump.sql
Откройте сохраненный дамп в редакторе и посмотрите как выглядит кириллица. Если кириллица читается, то поменяйте кодировку таблиц с cp1251 на utf8 и импортируйте дамп выбрав кодировку файла дампа utf-8 (изначально она выбрана).
8 Ответ от Маверик 2012-12-17 10:37:15
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Hanut сказал:
Судя по картинкам, кодировка таблиц у вас cp1251, а кодировка сайта utf8. Для перекодирования надо иметь доступ к консоли на сервере. Если доступ к консоли имеется, то выполните команду (вместо pass пропишите пароль пользователя root, вплотную к ключу -p):
mysqldump db_name table_name -uroot -ppass --default-character-set=cp1251 > dump.sql
Доступ к панели управления хостингом есть. Есть права к базе данных у меня одного. (Я не могу добавить ни одного нового пользователя, так как максимально допустимое число (1) пользователей MySQL для моего тарифного плана уже создано).
Вышеуказанную команду вводить в phpMyAdmin?
Здесь:
?
9 Ответ от Hanut 2012-12-17 11:11:08
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Маверик сказал:
Вышеуказанную команду вводить в phpMyAdmin?
Нет, команда для консоли. Посмотрите есть ли у вас возможность подключится к хостингу по SSH; это и будет консоль.
Если такой возможности нет, то перекодировать можно попробовать локально, если у вас локально стоит веб-сервер для разработки, например.
10 Ответ от Маверик 2012-12-17 15:49:44 (изменено: Маверик, 2012-12-17 15:50:23)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Подключил SSH-клиент PuTTY.
1. Сделал дамп (копию) БД. Для этого зашел по ssh и набрал команду:
mysqldump --no-tablespaces -h ваш_логин.mysql -u ваш_логин_mysql -pВаш_пароль -B Ваша_БД > mybd.sql
Результат — получилось (посмотрел по FTP-клиенту, копия базы есть).
2. Конвертировал БД. Для этого выполнил следующую команду:
iconv -f CP1251 -t UTF-8 mybd.sql > mybdutf.sql
Результат — неизвестен (скопировал базу на компьютер, открыл Notepad++, в строках 429, 589, 645, 758, 1055, 2899, 2900, 2901 и других строках — кракозябры.
3. Попытался сделать импорт БД. Для этого выполнил:
mysql -h ваш_логин.mysql -u ваш_логин_mysql -pВаш_пароль -B Ваша_БД < mybdutf.sql.
Результат — ERROR 1064 (42000) at line 282: 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 »Р РЋР С’ at line.
Получается, что перекодировать таблицы не удалось и не могу загрузить базу.
Такая процедура смены кодировки указана на моём хостинге (RU-CENTER).
11 Ответ от Маверик 2012-12-18 01:12:01
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Для получения информации по текущим кодировкам в phpMyAdmin ввёл команды:
SHOW VARIABLES LIKE "char%";
SHOW VARIABLES LIKE '%collation%';
Что это означает?
12 Ответ от Hanut 2012-12-18 11:37:20
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Вы не добавили ключ default-character-set, который я указал выше. Просто сохранить дамп не достаточно.
mysqldump --default-character-set=cp1251 --no-tablespaces -h ваш_логин.mysql -u ваш_логин_mysql -pВаш_пароль -B Ваша_БД > mybd.sql
Сохранили дамп. Конвертировать его не надо. Надо открыть в редакторе и заменить все cp1251 на utf8, затем импортируйте через консоль или через phpMyAdmin.
Смотрите глобальные переменные (GLOBAL). Глобальные настройки влияют на кодировку.
SHOW GLOBAL VARIABLES LIKE "char%";
13 Ответ от Маверик 2012-12-18 12:33:39
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Hanut сказал:
Вы не добавили ключ default-character-set, который я указал выше. Просто сохранить дамп не достаточно.
mysqldump --default-character-set=cp1251 --no-tablespaces -h ваш_логин.mysql -u ваш_логин_mysql -pВаш_пароль -B Ваша_БД > mybd.sql
Хорошо, я попробую.
Hanut сказал:
Сохранили дамп. Конвертировать его не надо. Надо открыть в редакторе и заменить все cp1251 на utf8, затем импортируйте через консоль или через phpMyAdmin.
Я уже сконвертировал (не без проблем) программой Sypex Dumper, но видимо не получилось. Все значения cp1251 заменились на utf8, но кракозябры остались и в редакторе и в phpMyAdmin.
У меня вопрос. Почему нельзя конвертировать дамп программой, а нужно это делать руками? (Ручная работа займёт много времени, не хотелось бы, чтобы она была напрасной). К тому же мне всегда важно понимать, почему нужно делать, так а не иначе.
Hanut сказал:
Смотрите глобальные переменные (GLOBAL). Глобальные настройки влияют на кодировку.
SHOW GLOBAL VARIABLES LIKE "char%";
Глобальные настройки вот какие:
Как мне их изменить и нужно ли? У меня форум на движке vBulletin 4.2.0 и насколько я знаю, там кодировка по умолчанию, и они «забывают», что неплохо бы указывать кодировку, как таблиц, так и соединения.
14 Ответ от Hanut 2012-12-18 13:43:31
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Маверик сказал:
У меня вопрос. Почему нельзя конвертировать дамп программой, а нужно это делать руками?
Конвертировать не надо, надо создать дамп с ключом —default-character-set=cp1251 и данные будут нормальными, затем в дампе надо заменить все cp1251 на utf8; в любом редакторе это выполняется методом поиска и замены одной кнопкой.
У vBulletin есть настройка конфигурации устанавливающая кодировку соединения с MySQL, ее надо установить в utf8. Сделать это надо после того, как в базе данных будет читаемая кириллица в таблицах с кодировкой utf8.
15 Ответ от Маверик 2012-12-18 14:30:03 (изменено: Маверик, 2012-12-18 14:33:12)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
cp1251_general_ci тоже заменять на utf8_general_ci?
Можно ли как-то изменить глобальные переменные? Есть ли в этом смысл? Или это может сделать только хостер?
16 Ответ от Hanut 2012-12-18 15:29:38
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Маверик сказал:
cp1251_general_ci тоже заменять на utf8_general_ci?
Обязательно.
Маверик сказал:
Можно ли как-то изменить глобальные переменные? Есть ли в этом смысл? Или это может сделать только хостер?
Если у вас есть доступ к конфигурационному файлу MySQL, то можно, иначе нельзя. Но делать это вовсе не обязательно. У форума есть настройка конфигурации устанавливающая кодировку соединения с MySQL — установите ее в utf8 и проблем не будет. Это равносильно смене глобальной кодировки для скрипта форума.
17 Ответ от Маверик 2012-12-19 14:14:31
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Hanut сказал:
Откройте сохраненный дамп в редакторе и посмотрите как выглядит кириллица. Если кириллица читается, то поменяйте кодировку таблиц с cp1251 на utf8 и импортируйте дамп выбрав кодировку файла дампа utf-8 (изначально она выбрана).
Я сохранил дамп с ключём. Открыл дамп Notepad++, но кириллица не читается, кракозябры — ‘Описание выгрузки финансовых данных РёР
Есть смысл заменять cp1251 на utf8 в дампе? Или как дальше быть?
18 Ответ от Hanut 2012-12-19 14:28:00
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Маверик сказал:
Есть смысл заменять cp1251 на utf8 в дампе? Или как дальше быть?
В статусной строке посмотрите кодировку, там будет либо ANSI, либо UTF8. Если там ANSI, то в меню выберите кодировку данных UTF8 без бом-байта (только не перекодировать). Это должно показать кириллицу. Когда увидите кириллицу в читаемом виде, тогда меняйте кодировку таблиц.
19 Ответ от Маверик 2012-12-19 18:30:11 (изменено: Маверик, 2012-12-19 18:30:56)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Hanut сказал:
Конвертировать не надо, надо создать дамп с ключом —default-character-set=cp1251 и данные будут нормальными, затем в дампе надо заменить все cp1251 на utf8; в любом редакторе это выполняется методом поиска и замены одной кнопкой.
У vBulletin есть настройка конфигурации устанавливающая кодировку соединения с MySQL, ее надо установить в utf8. Сделать это надо после того, как в базе данных будет читаемая кириллица в таблицах с кодировкой utf8.
Кириллица появилась в дампе и в таблицах базы данных в phpMyAdmin. Но на форуме кракозябры:
�� ���� ������������� �� ��������� �������:
������� �� �������.���� ������ ����������:
Форум закрывал перед этими операциями. В админку зайти не могу. Есть и другие кракозябры. Сейчас всё выглядит следующим образом — Форум бухгалтеров и аудиторов.
Для получения информации по текущим кодировкам в phpMyAdmin ввёл команды:
SHOW VARIABLES LIKE "char%";
Результат:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
character_sets_dir /.ro/usr/local/mysql/share/mysql/charsets/
SHOW VARIABLES LIKE '%collation%';
Результат:
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server cp1251_general_ci
SHOW GLOBAL VARIABLES LIKE "char%";
Результат:
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
Изменений нет, всё так же, как и в аналогичных запросах в нижеуказанных постах. Указаны/присутствуют настройки cp1251_general_ci.
Как быть дальше?
20 Ответ от Маверик 2012-12-19 19:52:57
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
После внесения изменений в файл config.php кракозябры наконец пропали. Открываем данный файл и находим строчку:
// $config['Mysqli']['charset'] = 'utf8';
По умолчанию она закомментирована. Нужно её раскомментировать (убрать //) и указать кодировку utf8. Выйти должно следующее:
$config['Mysqli']['charset'] = 'utf8';
Результат с кодировкой utf8 — Форум бухгалтеров и аудиторов Glbyh.Ru. Всё вроде бы нормально работает.
Меня смущает то, что на сервере некоторые настройки по умолчанию cp1251. Не будет ли это мешать нормальной работе сайта, его производительности (загрузка страниц и другим) и доставлять неудобства пользователям?
21 Ответ от Hanut 2012-12-19 21:16:12
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Маверик сказал:
Меня смущает то, что на сервере некоторые настройки по умолчанию cp1251.
Это не имеет значения. С установленной кодировкой соединения с MySQL ($config[‘Mysqli’][‘charset’] = ‘utf8’;) скрипт будет всегда работать с указанной кодировкой utf8; то есть будет создавать таблицы в данной кодировке, будет передавать и принимать данные в данной кодировке. Изначально проблема у вас была именно в этой одной строке, если бы сразу ее установили в utf8, то не пришлось бы мучиться с перекодированием.
22 Ответ от Маверик 2012-12-19 21:31:03 (изменено: Маверик, 2012-12-19 21:34:08)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Hanut сказал:
Изначально проблема у вас была именно в этой одной строке, если бы сразу ее установили в utf8, то не пришлось бы мучиться с перекодированием.
Я пробовал её изменять, не помогало. Форум был неработоспособен (или что-то с ним было не ладное, отображение букв нечеткое и не везде, пустые места по моему и в админку не получалось зайти). Сейчас точно не скажу, что было, но помню, что сразу всё вернул обратно, так как испугался, того что увидел.
23 Ответ от Маверик 2012-12-19 21:39:32 (изменено: Маверик, 2012-12-19 21:41:46)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Я не могу понять. При регистрации пользователя с ником например Олег Николаевич, не получается зарегистрироваться, так как выдаёт сообщение:
Ваше имя пользователя не может быть длиннее 25 символов.
хотя символов меньше 25. Мне говорили, что это кракозябры в базе данных и проблемы в кодировке. Но сейчас то в базе кракозябров нет, а проблема осталась. Непонятно.
Я уже и сервер перезагрузил на хостинге.
24 Ответ от Hanut 2012-12-19 23:11:49
- Hanut
- Модератор
- Неактивен
- Откуда: Рига, Латвия
- Зарегистрирован: 2006-07-02
- Сообщений: 9,723
Re: Изменение кодировки таблиц с cp1251 на utf8
Маверик сказал:
Я пробовал её изменять, не помогало.
Надо было изменять перед установкой форума, а не после того, как в базе данных уже крякозябры.
Маверик сказал:
хотя символов меньше 25
Обратитесь к разработчику форума или к сообществу пользователей. Я не знаю в чем там проблема.
25 Ответ от Маверик 2012-12-23 09:31:26 (изменено: Маверик, 2012-12-23 09:33:15)
- Маверик
- Участник
- Неактивен
- Откуда: Москва, Россия
- Зарегистрирован: 2012-12-15
- Сообщений: 36
Re: Изменение кодировки таблиц с cp1251 на utf8
Проблема с регистрацией русских ников на форуме была решена следующим образом. У меня стоит PHP 5.2 я зашёл на хостинг и настроил модуль добавив в настройках расширение mbstring. Проблема исчезла, могу регистрировать ник из 25 русских символов включая пробелы.
Попутно я поставил модуль PHP 5.3 (он мне был доступен) в настройках расширение mbstring уже стоит. Всё отлично! Проблемы с метками тоже пропали.
Hanut сказал:
Маверик сказал:
У меня размер базы 180 МБ, а в phpMyAdmin можно импортировать 64 МБ. Как быть?
Импортируйте из каталога, или разбейте дамп по таблицам.
В конфигурационный файл phpMyAdmin (config.inc.php) добавьте строку:$cfg['UploadDir'] = './upload/';
Создайте в корне phpMyAdmin каталог upload и загрузите в него дамп, после чего он появится на странице импорта в выпадающем списке. Таким образом можно импортировать дампы практически любого размера.
Можно здесь поподробнее. Несмотря на то, что я могу загружать большие дампы программой Sypex Dumper, я бы всё-таки хотел в дальнейшем делать это в phpMyAdmin. Так вот, как найти конфигурационный файл phpMyAdmin config.inc.php на сервере? Я его там не могу найти и у меня ощущение, что его там нет. Хостинг у меня RU-CENTER, если это имеет значение.
Страницы 1 2 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
07.07.2018
1.Duplicate entry ‘H1vyYZlZDAeRMeZJ76uKHWozRqctgvK1’ for key ‘PRIMARY’
Нужно снести содержимое базы и заново попытаться восстанавливать сайт из резервной копии, также нужно посмотреть включено ли хранение сессий в отдельной базе данных в настройках расширенного режима безопасности группы администратор, отключить такую настройку.
2. Превышен лимит на размер базы данных
На виртуальном хостинге есть ограничения размеров базы данных. Если размер базы превысит лимит, вам начнут высылаться уведомления. При превышении максимального размера высылается предупреждение с последующей блокировкой до момента устранения проблемы. В этом случае нужно или повысить тариф, или смотреть содержимое базы. В моем случае таблицы b_event_log — много места занимала, b_event — очень много было, b_captcha — также много было. Нужно войти в Phpmyadmin и в базе очистить указанные таблицы.
3. Allowed memory size of
Откройте файл php.ini и найдите там строку: memory_limit = 256M, увеличьте значение (для тарифов виртуального хостинга есть ограничения)
4. Cannot use BitrixMainTextString as String because ‘String’
нет обновлений битрикс для используемой версии РНР, обычно проблема возникает при восстановлении сайта на другом хостинге. Пробуйте начать с версии РНР 5.6
5. DB query error. Please try later
Обычно ошибка доступа к базе данных
1) Открой файл /bitrix/php_interface/dbconn.php и вставь в самый низ файла строку $DBDebug=true;
6. max_input_vars
В файле .htaccess задайте php_value max_input_vars 10000, но не всегда помогает для изменения данной директивы необходимо отредактировать файл php.ini: max_input_vars = 10000
7. Maximum execution time of 60 seconds exceeded
Могут помочь такие варианты:
1) после внесения изменений в php.ini требуется рестарт apache.
2) если определена переменная set_time_limit в файле /bitrix/php_interface/dbconn.php то она имеет приоритет по сравнению с тем что хранится в php.ini в max_execution_time
3) ошибка может возникать из-за нехватки значения параметра memory_limit(также определяется в этих файлах)
8. MySQL server has gone away
В процессе выполнения запроса сервер оборвал соединение. Проблема связана с настройкой MySQL и часто возникает когда на сервере установлен небольшой лимит времени на соединение.
Установите в bitrix/php_interface/after_connect.php:
$DB->Query(«SET wait_timeout=28800»);
9. opcache.revalidate_freq для битрикс
Мне помогает связка в файле .htaccess, особенно на тарифе host-0 reg.ru, который не сильно подходит для битрикс тарифа:
php_value opcache.revalidate_freq 0
php_value max_input_vars 10000
php_value default_socket_timeout 60
Также помогает переход на РНР 7.0
10. Query Error SET LOCAL time_zone
на виртуалке битрикс
$DB->Query(«SET LOCAL time_zone=’».date(‘P’).»‘»);
11. Кодировка таблицы (cp1251) отличается от кодировки базы (utf8)
Для той таблицы на которую указывает ошибка потребуется выполнить ряд SQL запросов в базе данных:
ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ciДля смены кодировки таблиц выполните, пожалуйста, запрос для каждой таблицы:
ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
12. Ошибка больших файлов импорта
Потребуется увеличить лимиты размера файлов в файле php.ini.
13. Ошибка! Структура базы данных имеет ошибки- поля отличаются
Смотрим название таблиц в логах
Перейдите, пожалуйста, в sql-строку (Настройки > Инструменты > SQL запрос) и там выполните запрос:
ALTER TABLE `b_ticket` MODIFY `TITLE` varchar(255) NOT NULL ;
ALTER TABLE `b_ticket` MODIFY `OWNER_SID` varchar(255) NULL DEFAULT NULL ;
ALTER TABLE `b_ticket` MODIFY `LAST_MESSAGE_SID` varchar(255) NULL DEFAULT NULL ;
ALTER TABLE `b_ticket` MODIFY `SUPPORT_COMMENTS` varchar(255) NULL DEFAULT NULL ;
После этого переустановите (удалить и снова установить) модуль поиска без сохранения
таблиц (Настройки-Настройки продукта-Модули).
Затем нужно выполнить полную переиндексацию. Для этого в административной части сайта перейдите,
пожалуйста, в «Настройки > Поиск > Переиндексация». Снимите галочку «Переиндексировать только измененные»,
установите шаг, например, 10 секунд и нажмите кнопку «Переиндексировать».