ФорумПрограммированиеPHP для идиотов → База в разных кодировках

База в разных кодировках

  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 1:14

    Суть такая. Есть база. Половина в UTF-8, половина в CP1251. Нужно все превести в ютф. База относительно большая. Вручную - пизданешься. Весит несколько мегов. Так что пхп скорее всего обработает нормально.
    Снял бекап. Распаковал. Попытался сделть примерно так (от безысходности пробовал всякую хуйню, поэтму в коде могут быть дикие косяки, но смысл я думаю понятен):
    <?php
    set_time_limit (0);
    $file_name = 'pd';
    $fp = fopen($file_name . '.sql', 'r');
    if (!$fp)
    {
       echo 'Ошибка при открытии файла';
    }
    while (!feof($fp))
    {
       $buffer = fgetc($fp);
    $char = mb_detect_encoding($buffer, "auto");
    //echo $char;exit();
    if ($char != 'UTF-8' AND $char != 'ASCII')
    {
     $buffer = iconv('cp1251', "UTF-8", $buffer);
     //echo $char . '1';
    }
    $base .= $buffer;
    }
    fclose($fp);

    echo $base;
    exit();
    /******************************************************
    *******************************************************
    *Дальше идет хуйня не имеющая отношения к делу.
    *******************************************************
    *******************************************************/
    $fp = fopen($file_name . '_utf8.sql', 'w');

    if (!$fp)
    {
       echo 'Ошибка при открытии файла';
    }

    fwrite ($fp, $base);
    echo "Ok";

    fclose($fp);

    Есть какие мысли, опыт?
    Спустя 83 сек.
    Забыл сказать. Неправильно конвертится.
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 10:44, спустя 9 часов 30 минут 8 секунд

    SpartakuS, открой её в Нотепад++ и сделай замену по всему тексту одной кодировки (строки с кодировкой) на другую, сохрани файл в нужной тебе кодировке, залей на сервер. Вот и всего делов-то :)
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 12:28, спустя 1 час 44 минуты 15 секунд

    Givi, не понял.
    Там достаточно много в альтернативной кодировке. По строке все не скопируешь.
    Или ты имеешь символ а в одной кодировки заменить на сомвол а в другой и так до я?
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 13:16, спустя 47 минут 30 секунд

    SpartakuS, то есть, если редактором (Нотепад++ или подобное, поддерживающее юникод) дамп открыть, то половина кириллицы читается нормально, а половина иероглифами?
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 13:46, спустя 29 минут 48 секунд

    Givi, именно
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 14:14, спустя 28 минут

    Сделай дамп "дампером". Мне как-то в подобной ситуации помог.
    Да и вообще штука очень удобная для больших баз.
    Спустя 49 сек.
    Он, по идее, закинет весь файл в одну кодировку, тогда уже и править (автозамены делать) можно будет его.
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 14:21, спустя 7 минут 27 секунд

    Givi, кстати хорошая идея. Я про первый твой пост.

    SpartakuS, сделай дамп таблиц которые только в кодировке СP1251 и через Нотепад++ переведи ее в UTF.
    Из базы удали таблицы и залей получившиеся.
  • Barbos

    Сообщения: 21 Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 22:41, спустя 871 день 8 часов 20 минут

    Думаю, мы доставим друг другу удовольствие.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!