Акция!  Домен 34 грн, домен 55 грн, домен  - 200 грн домен  - 65 грн, домен  - 99 грн, домен  - 56 грн!, домен  - 425 грн!
Мы используем cookie-файлы
Для оптимизации работы нашего сайта мы используем cookie-файлы. Продолжая использовать сайт, Вы соглашаетесь с использованием cookie-файлов.
  • RUB
  • USD
  • EUR
  • UAH
Чат техподдержки
Вы являетесь клиентом?
  • +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) 170-15-42  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
9 лет
хостинг: нет
домен: нет
Продлема с кодировками
Трабла такого характера есть БД
Сопоставление соединения с MySQL: utf8_general_ci
Таблицы в БД идут как
cp1251_general_ci
cp1251_ukrainian_ci
- -
Как решить задачу с кодировками?
нужно перебрать все таблицы и выполнить перекодировку всех записей и
соответственно сопоставление всех таблиц в
utf8_general_ci

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

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

Тема закрыта по истечению срока давности.