Mysqldump, кодировки и все-все-все.

Discussion in 'Linux, Freebsd, *nix' started by 5maks5, 6 Apr 2016.

  1. 5maks5

    5maks5 Elder - Старейшина

    Joined:
    29 Aug 2010
    Messages:
    451
    Likes Received:
    264
    Reputations:
    40
    Приветствую камрады!
    Вопрос в чем: имеется база данных mysql, в подключении в скриптах жестко зашит latin1.
    Сама база в utf8.
    При попытке экспортировать вместо русских символов непонятные крякозабры.
    Определялка кодировок показала, что это ISO-8859-1.
    Ну недолго думая, зайдя покурив StackOverflow применяю:
    Code:
    mysqldump --user=$dbuser --password='$dbpass' --host=$dbhost $dbname persons --default-character-set=latin1 > /var/www/".$toDay."_DB_3.sql
    
    Далее iconv:
    Code:
    iconv -f iso_8859-1 -t utf-8 db_3.sql > db_3_1.sql
    
    На выходе опять гумос в виде непонятных цыферок, крякозабр.
    Сил моих нет, рассчитываю на общий разум.
     
  2. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Сам sql-файл лучше не конвертировать, могут возникнуть проблемы если в дампе присутствуют экранированные символы вида 0xFF. Да и если уж конвертировать то не в iso_8859-1 а в CP1251.

    Предполагаю, что у тебя простой сайт на пхп. Тогда тебе лучше всего найти в скриптах место, где устанавливается соединение с базой данных. И после соединения выполнить sql-запрос SET NAMES UTF8. Т.е. нужно сделать небольшую правку в php-скриптах.

    Если есть возможность то залей движок на яндекс-диск, посмотрим что можно сделать.
     
  3. 5maks5

    5maks5 Elder - Старейшина

    Joined:
    29 Aug 2010
    Messages:
    451
    Likes Received:
    264
    Reputations:
    40
    Я конвертирую не в ISO, я конвертирую из ISO :)
    А сайт не мой - шелл.
    Поэтому и задача - выкачать базу аккуратно.
    Любые моменты с перекодировкой на стороне mysql базы сразу принесут необратимые последствия и буду "звоночком".
     
  4. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Сорян, но в таких целях помогать не буду)
     
  5. 5maks5

    5maks5 Elder - Старейшина

    Joined:
    29 Aug 2010
    Messages:
    451
    Likes Received:
    264
    Reputations:
    40
    Сам разобрался уже. Поковырял логи mysqldump'a, выяснил, что он его все равно гонит в utf-8, а не в latin1.
    Перед дампом таблицы charset encoding выставил в принудительный latin1 и прекрасно сдампился.
    Затем в utf-8 без bom.
    Все тип-топ.
    PS: Тут еще целый раздел шелловодов в этих темах сидит и хэш-крякеров и как-никак это форум sec-тематики :)
     
  6. 5maks5

    5maks5 Elder - Старейшина

    Joined:
    29 Aug 2010
    Messages:
    451
    Likes Received:
    264
    Reputations:
    40
    Fixed:
    Code:
    <?php
        $toDay = date('d-m-Y');
    
        $dbhost =   "**";
        $dbuser =   "**";
        $dbpass =   "**";
        $dbname =   "**";
    
        exec("mysqldump --user=$dbuser --password='$dbpass' --host=$dbhost $dbname tablica --default-character-set=latin1 --extended-insert=FALSE --complete-insert=TRUE > /var/www/l/".$toDay."_pagebreak.sql");
    
    
    ?>