MySQL. Продлема с кодировками

transug
14 років
0
Трабла такого характера есть БД
Сопоставление соединения с MySQL: utf8_general_ci
Таблицы в БД идут как
cp1251_general_ci
cp1251_ukrainian_ci
- -
Как решить задачу с кодировками?
нужно перебрать все таблицы и выполнить перекодировку всех записей и
соответственно сопоставление всех таблиц в
utf8_general_ci

Подскажите!
visite
14 років
0
Однозначно поддерживаю вопрос.Уже написал в техподдрержку, посмотрим как быстро среагируют, но помоему там сегодня выходной.У меня таблицы в utf8, сопоставление тож в utf8_general_ci, а collation-ы в cp1251_ukranian_ci для нормальной работы необходимо чтоб все было в одной кодировке....
transug
14 років
0
После долгих проб и ошибок, решил поделиться методом – ну и пусть что не самый быстрый :)
--
Решение: Буду исходить из своей ситуации!
! сопоставление (тип БД) utf8_general_ci
! кодировка cp1251_ukrainian_ci , cp1251_general_ci,
--
Потребуется phpmayadmin ( c оболочки я не тестировал )
Работать будем на локальной БД, кому как удобно можно и на сервере.
- Делаем экспорт БД ( old.sql )
- На локалке создаем новую БД в utf8_general_ci (test_bd)
- Импортируем нашу БД из сервера -> old.sql в test_bd
- Открываем БД test_bd
- Окрываем поле sql запросов и начинаем конвертацию скюэль запросами типа
ALTER TABLE `name_tabl_in_bd` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Где utf8-кодировка нашей БД test_bd, если бы создали БД cp1251_general_ci то запрос выглядел так:
ALTER TABLE `name_tabl_in_bd` CONVERT TO CHARACTER SET cp1251 COLLATE utf8_general_ci;


--
Таким образом, конвертируются указанные таблицы в кодировку utf8_general_ci. Обращаю внимание на кавычки (не знаю как называются), но ‘’!=``; если указать не те будет выдаваться ошибка.
--
- далее подключаем сайт (на локальной машине) к test_bd – меняем настройки в конфиге.
- тестируем, где токо можно и в админке тоже
- если все гуд, то делаем экспорт БД test_bd в new.sql и заливаем на сервер хостинга.
--
--
Помоему на доступном языке, да в пару таблицах у меня произошла ошибка, но в дампе вид кодировки указан правильно. С ошибками не разобраля – чуть потом. Можно всю процедуру выполнить рекурсивно и на сервере. НО У меня нет класса работы с мускулом, да и в ручном режиме налез на ошибки (надо их отлавить).
--
ЕСЛИ кто поделиться хорошим классом под мускул да и мануалом к нему буду благодарен !

З.Ы. Как разберусь с рекурсией выложу, сразу говорю будет не скоро, если что пишите :)
transug
14 років
0
Дмитрий Викторович для вас кажется вот так:
ALTER TABLE `name_tabl_in_bd` CONVERT TO CHARACTER SET utf8 COLLATE нужная вам кодировка;
а по быстродействию не скажу точно (нечем померять) но при разных кодировках будет работать нормаль.
А вот если все в одной кодировке то проц. будет меньше тактов делать.
А это - хорошо, хотя при сегоднящих процах (не имею в виду для сервера), программисты немного подзабивают на такты, и память :(( - а зря!
transug
14 років
0
Добавлюсь!!!
--
Если надо поменять кодировку самой БД то -> (при этом кодировка таблиц не меняется:), получается меняеться сопоставление соединения!
ALTER DATABASE `test_bd` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
- причем здесь utf8 не привязывается к старой кодировке БД, тоесть процедуру можно выполнить на гарячую :)
--
это так а вось кому пригодится
maximu_s
14 років
0
Я на локалке у себя все выставил utf8 и utf8_general_ci

После конекта к базепишу следующие

$charset = "utf8";
$conn->query( 'set names '.$charset );
$conn->query ("set character_set_client='$charset'");
$conn->query ("set character_set_results='$charset'");
$conn->query ("set collation_connection='${charset}_bin'");

использую mysqli так что не перепутайте.

Ща домой приду попробую поэкспериментировать на серванте

PMA вещь надежная но как то кривовато с MEDIUMTEXT работает.
Поэтому подключаюсь родным MySQL Administrator'ом
maximu_s
14 років
0
Значит так. Все файлы(скрипты) сохранил в windows-1251, база в utf-8
После каждого конекта пишу

$charset = "cp1251";
$conn->query( 'set names '.$charset );
$conn->query ("set character_set_client='$charset'");
$conn->query ("set character_set_results='$charset'");
$conn->query ("set collation_connection='${charset}_bin'");

все теперь по нормальному сохраняется.

P.S.:Поскольку скрипты были в utf-8 то и браузер кодировку выбирал utf-8, а следовательно все данные которые ишли в БД со страниц конвертировались в utf-8
В админ панели не забываем выставлять кодировку страниц, которую выдает сервер либо ставим вручную в аштеаксесе
rudenko
14 років
0
Правильней всего, для того, что б небыло ошибок это переконвертировать и сайт и базу в одну кодировку. В Linux это делаеться командой iconv, под Win - не знаю. Обычно пользователи грузят на ftp базу с просьбой сконвертировать с одной кодировки дамп в другую и мы это делаем.
maximu_s
14 років
0
Кому надо(если надо), то могут дать php-скрипт, который переконвертирует базу из одной кодировки в другую и сохранит это все дело в sql файле.
vuyko2009
13 років
0
Илья, зделайте моей БД так)
Тема закрита.