Пролюбил кодировку MySQL

Discussion in 'PHP' started by ntldr, 30 Jan 2010.

  1. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    Дело было так. Когда я взял хост там была latin1, сервер писал в базу с кодировкой цп1251. Потом я "перевел" как мне казалось, в utf8_general_ci. Но в действительности оно только сделала из нормального цп1251, битый цп1251, то есть приписала лишний байт к нему. То есть сейчас символы в базе хранятся так:
    1 левый байт - 1 цп1251'шный

    В общем как обычно поступают в подобных случаях?
     
  2. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Восстанавливать БД из дампа, если таковой был.
     
  3. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    меня интересуют способы фикса такой ломанной кодировки. Ведь информация то цела, просто немного обфусцирована ;)
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ntldr Вернуть обратно latin1 не пробовали (теми же действиями, которыми превращали в utf8)? Такое кривое преобразование произошло из-за того, что однобайтовая кодировка latin1 соответствует как раз утф в виде "левый байт"+байт latin1. Обратное преобразование должно пройти нормально

    Не забудьте сохранить текущий дамп ^^
     
    _________________________
    #4 Gifts, 31 Jan 2010
    Last edited: 31 Jan 2010
    1 person likes this.
  5. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    да, в принципе получилось, но только на отдельной таблице. Всю базу не получается перекодировать :(
     
    #5 ntldr, 31 Jan 2010
    Last edited: 31 Jan 2010
    1 person likes this.
  6. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    а возможно ли текстовый дамп бд перекодировать скриптом? к примеру по регулярному выражению найти все места `field`= 'wrong_data' и с wrong_data сделать манипуляцию?
     
  7. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    не понял мысли, но зато у меня появилась идея. Написать скрипт который будет делать селект, затем иконв и апдейт в новую базу. Попробую так
     
  8. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    в общем у меня получилось из mysql выдрать дамп в чистом цп1251 и перевести его в utf-8. проверял браузером)) он все верно отображал в utf-8. Ho при импорте дампа через утилиту mysql - получаются "иероглифы". Втф?
     
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ntldr При создании таблиц из дампа - указана неправильная кодировка.
    Code:
    CREATE TABLE `dedyki` (
    тратата описание таблицы
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
     
    _________________________
  10. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    дело в том что при создании из дампа у меня уже стоял utf8.
    Мб играет роль некое "Сопоставление соединения с MySQL:" которое равно utf8_unicode_ci заместо utf8_general_ci?
     
  11. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    через mysql administrator? там квадратики вместо данных? это только отображается так криво, импорт пройдёт нормально, уже не раз сталкивался.
     
  12. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    нет через консольный mysql. Просто у меня тестовая база с которой я сразу начал нормально работать, там русские буквы идеально отображаются
     
  13. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    Получилось.
    1)Посмотрев в 16-ричном виде я узнал что MySQL отдает результаты в обычном цп1251
    2)Сдампил бд:
    mysqldump -u root -ppassword --default-character-set=latin1 --skip-set-charset baza > dump.sql
    3)Перевел из цп1251 в утф8
    iconv -f CP1251 -t UTF-8 -o test1.sql dump.sql
    4)Залил обратно в бд дамп в утф8
    mysql --default-character-set=utf8 -u root -ppassword -D baza < test1.sql
    5)PROFIT
     
Loading...
Similar Threads - Пролюбил кодировку MySQL
  1. GAiN
    Replies:
    3
    Views:
    7,940