Поддержка Проблемы и решения И опять cp1251 и utf8

  • Добрый день.
    Искал и так и сяк, ну не нашел. Старый, наверное уже. 🙁

    В свое время сглупил и установил кодировку таблиц cp1251
    Соответственно в wp-config.php также установлена эта кодировка
    /** Кодировка базы данных для создания таблиц. */
    define(‘DB_CHARSET’, ‘cp1251’);
    /** Схема сопоставления. Не меняйте, если не уверены. */
    define(‘DB_COLLATE’, ‘cp1251_general_ci’);

    Все работает, везде русский, но заметил, что проблемы с поиском, Большие и маленькие буквы — разные.
    Заглянул в phpmyadmin, а в таблах грузиница.

    Конвертация таблиц через Alter ничего не меняет, ну, кроме того, что может побить структуру.

    Да и дампы сохраняются в грузинице, соответственно.
    С помощью дупликатора не смог поправить.

    Есть ли, пусть не простой, но действенный и понятный способ перевести все на русский?

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Юрий

    (@yube)

    а в таблах грузиница.

    Что Вы так обозвали? P-utf, D-utf или latin1 с умляутами (1252)?

    Просто поменять кодировку таблицы не достаточно, нужно по каждому полю пройтись. В Сети есть инструкции перевода кривого utf в прямой. Там на вид очень страшно 🙂 Типа такого
    CONVERT(CONVERT(CONVERT(field USING cp1251) USING binary) USING utf8);
    Главное — правильно определить исходную, так сказать, кодировку.

    Теоретически можно попробовать перегнать через сипекс дампер, если угадать с кодировкой, у некоторых получается 🙂

    Юрий, это не ненависть к грузинам, просто еще с ФИДО пошло 🙂
    А обозвал так вот это

    Социальные сети

    Конструкция то понятная, Но, зараза аж 3 конверта!!!

    Попробуем.

    Попробовал, сработало. Теперь русский….
    Спасибо.

    Модератор Юрий

    (@yube)

    Социальные сети

    P-utf 🙂

    Сенкс.

    Еще раз спасибо Юрию.
    К сожалению без танцев с бубнами не обошлось
    Шаги:
    1. Создаем новую БД и ставим у нее кодировку uf8_general_ci (к сожалению при смене на существующей у меня слетела верстка).
    2. Переписываем нашу БД в новую.
    3. В новой БД выполняем:
    SELECT DISTINCT CONCAT(‘update ‘,isc.TABLE_NAME,’ set ‘,isc.COLUMN_NAME,’=CONVERT(CONVERT(CONVERT(‘,isc.COLUMN_NAME,’ USING cp1251) USING binary) USING utf8);’) AS query FROM INFORMATION_SCHEMA.COLUMNS isc WHERE isc.TABLE_SCHEMA = ‘Имя БД’ AND isc.CHARACTER_SET_NAME=’cp1251′;
    4. Получившийся выхлоп также прогоняем в новой БД
    5. В новой БД выполняем
    SELECT CONCAT(‘ALTER TABLE ', t.TABLE_SCHEMA, '.', t.TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;’) as sqlcode FROM information_schema.TABLES t WHERE t.TABLE_SCHEMA = ‘Имя БД’ AND t.TABLE_COLLATION LIKE ‘cp1251%’;
    6. Получившийся выхлоп также прогоняем в новой БД (обратная последовательность разрушила верстку)
    7. Тут можно в конфиге поменять имя БД на новую, а старую затереть или копирнуть.

    У меня на хостинге есть возможность создания нескольких БД. Наверное можно сделать и в одной БД, или на боевых таблах или на новых с префиксами. Но я не стал так углубляться.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «И опять cp1251 и utf8» закрыта для новых ответов.