• UAH
  • USD
  • RUB
  • EUR
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепр
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 449-04-21  Life
  • +38(067) 400-88-44  Киевстар
  • +38(095) 630-90-82  MTC
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

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

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

Подскажите!
visite
05.04.2010
хостинг: нет
домен: нет
Однозначно поддерживаю вопрос.Уже написал в техподдрержку, посмотрим как быстро среагируют, но помоему там сегодня выходной.У меня таблицы в utf8, сопоставление тож в utf8_general_ci, а collation-ы в cp1251_ukranian_ci для нормальной работы необходимо чтоб все было в одной кодировке....
transug
06.04.2010
хостинг: нет
домен: нет
После долгих проб и ошибок, решил поделиться методом – ну и пусть что не самый быстрый :)
--
Решение: Буду исходить из своей ситуации!
! сопоставление (тип БД) 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
06.04.2010
хостинг: нет
домен: нет
Дмитрий Викторович для вас кажется вот так:
ALTER TABLE `name_tabl_in_bd` CONVERT TO CHARACTER SET utf8 COLLATE нужная вам кодировка;
а по быстродействию не скажу точно (нечем померять) но при разных кодировках будет работать нормаль.
А вот если все в одной кодировке то проц. будет меньше тактов делать.
А это - хорошо, хотя при сегоднящих процах (не имею в виду для сервера), программисты немного подзабивают на такты, и память :(( - а зря!
transug
06.04.2010
хостинг: нет
домен: нет
Добавлюсь!!!
--
Если надо поменять кодировку самой БД то -> (при этом кодировка таблиц не меняется:), получается меняеться сопоставление соединения!
ALTER DATABASE `test_bd` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
- причем здесь utf8 не привязывается к старой кодировке БД, тоесть процедуру можно выполнить на гарячую :)
--
это так а вось кому пригодится
maximu_s
18.05.2010
хостинг: есть
домен: есть
Я на локалке у себя все выставил 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
20.05.2010
хостинг: есть
домен: есть
Значит так. Все файлы(скрипты) сохранил в 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
В админ панели не забываем выставлять кодировку страниц, которую выдает сервер либо ставим вручную в аштеаксесе
Илья
20.05.2010
хостинг: есть
домен: есть
Правильней всего, для того, что б небыло ошибок это переконвертировать и сайт и базу в одну кодировку. В Linux это делаеться командой iconv, под Win - не знаю. Обычно пользователи грузят на ftp базу с просьбой сконвертировать с одной кодировки дамп в другую и мы это делаем.
maximu_s
20.05.2010
хостинг: есть
домен: есть
Кому надо(если надо), то могут дать php-скрипт, который переконвертирует базу из одной кодировки в другую и сохранит это все дело в sql файле.
vuyko2009
08.10.2010
хостинг: нет
домен: нет
Илья, зделайте моей БД так)
Участвовать в общении на этом форуме могут только
зарегистрированные пользователи.

Если вы уже зарегистрированы Вам необходимо войти на форум.

Тема закрыта по истечению срока давности.
Горячая линия
(044)
392 74 33
другие города