Автор Тема: Mysqldump encodings  (Прочетена 932 пъти)

Marto

  • Участник
  • *****
  • Публикации: 92
    • Профил
    • WWW
Mysqldump encodings
« -: Апр 20, 2007, 17:37 »
Искам да прехвърля базата на един wordpress блог. Прочетох това : http://www.hostbulgaria.com/tutorials/mysql-charset-encoding.aspx

Стигнах до извода, че нищо не разбрах. За мен до момента блога ми е работил на utf8, и се е отварял на utf8, и базата е била съответно на utf8. Как да я дъмпна, така че да стане? Много е оплетено всичко. Опитвам се да я импортна в един phpMyAdmin. И си мисля, че там нещо не е тамън. Ето какво правя :
1. mysqldump -u root -p --default-character-set=latin1 wordpress > wordpress.sql
Ако тук не използвам --default-character-set=latin1 файла е нечетим през FireFox с енкодинг utf-8.
2. Импортирам в phpMyAdmin с настройка да работи на utf8. Резултата после в сайта е '<img'>?'<img'>?'<img'>?'<img'>?'<img'>.

Правя и същото, но с perl -pi -e "s/latin1/utf8/g" wordpress.sql
Тогава сайта пак не се чете на uft8, каквото е по default, но ако от firefox сменя на CP-1251 се оправя ... което вобще не ми се вързва. Пробвах още много варианти. Цял ден си играх. Някой знае ли вълшебната формула за забъркване на кашичката?

Благодаря !



Активен

alabal

  • Участник
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Mysqldump encodings
« Отговор #1 -: Апр 20, 2007, 18:23 »
Предложение: защо не използваш iconv?
Нещо такова:
# mysqldump -u root -p wordpress > wordpress.sql
и после
iconv -f staria_encoding -t novia_encoding wordpress.sql > wordpress_ne.sql
и после:
mysql -u root -p wordpress < wordpress_ne.sql

За да видиш възможните кодирания:
iconv -l
(така и не разбрах кое кодиране искаш да промениш)
man на iconv е много полезен - ако съм объркал нещо - лесно може да се провери).

P.S.: А, май в края на статията е предложен точно такъв вариант.
Активен

It makes you awful glad that you were born a man.

Marto

  • Участник
  • *****
  • Публикации: 92
    • Профил
    • WWW
Mysqldump encodings
« Отговор #2 -: Апр 20, 2007, 19:10 »
Ами аз и това пробвах, но не ми е ясно кой е стария, и кой новия encoding. Аз до колкото ги виждам нещата, нищо не искам да смнеям. Би трябвало от utf8, на uft8 нищо да не се сменя. Как да разбера, кой е стария, кой е новия. Искам да работя само с utf8. По едно време така ги бях завъртял нещата и аз не помня вече как, че аха да се оправи ама се оказа, че "И" и "ш" ми излизат като "?" и "??".  '<img'>
Активен

luda_glawa

  • Участник
  • *****
  • Публикации: 649
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Mysqldump encodings
« Отговор #3 -: Апр 20, 2007, 20:24 »
Принципно "dump" файла по-подразбиране е с кодировка utf-8. Виж какви са разликите между двата SQL сървъра, които използваш.

Цитат
.. --default-character-set=charset_name
Use charset_name as the default character set. See Section 5.10.1, “The Character Set Used for Data and Sorting”. If no character set is specified, mysqldump uses utf8. ...

цък



Цитат
За експортиране на база данни можете да ползвате phpmyadmin или mysqldump, които ще генерират текстов файл (dump), със структурата и данните на вашата база. При големи бази данни е препоръчително да ползвате mysqldump (необходим ви е ssh достъп до сървъра). По подразбиране и двете програми ще генерират дъмп в utf-8 формат независимо с какъв чарсет е базата. Това е нормално и не е проблем. Енкодинга на файла е utf-8, но ако в базата таблиците са били с cp1251, това ще бъде отбелязано в sql кода за създаване на таблицата в самия дъмп файл.

цък 2
Активен

С Уважение:

Luda Glawa ;-)

Marto

  • Участник
  • *****
  • Публикации: 92
    • Профил
    • WWW
Mysqldump encodings
« Отговор #4 -: Апр 21, 2007, 09:38 »
Винаги за мен тази каша с енкодингите ще си остане каша. Нещо не ми се отдава да ги разбера, но все пак си реших проблема. Ще опиша как, а ако има човек, който е разбрал ситуацията, нека внесе малко светлина. Мисля, че ще се улесни работата на много хора. Първо ето нещо, което може да е от помощ : http://www.oreillynet.com/onlamp...._t.html
Второ, ето как аз си реших проблема :
Примерен код
mysqldump -u root -p --default-character-set=latin1 wordpress > wordpress.sql
Премахвам следния ред от wordpress.sql :
/*!40101 SET NAMES latin1 */;
iconv -c -f cp1251 -t utf8 wordpress.sql > wordpress2.sql
perl -pi -e "s/latin1/utf8/g" wordpress2.sql

Ако не сложа --default-character-set=latin1 не става.
Версията на MySQL сървъра от който експортирам е 5.0.24a, а тази в която импортирам 5.0.27.
Навеждат ме някакви мисли, че MySQL сървъра ми не е компилиран с default charset utf8, но пак не съм съвсем сигурен какво точно е това latin1 и какво общо има всичко с CP1251, след като сайта до сега е работил на utf-8. Открих решението, благодарение на разиграване на варианти и проби в FireFox със смяна на encodings. '<img'>
Активен

zeridon

  • Killmode enabled
  • Administrator
  • Участник
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Mysqldump encodings
« Отговор #5 -: Апр 21, 2007, 11:14 »
ето ти и едно малко по лесно решение ... даже 2
1) инсталираш си разширението database backup за WP
или
2) използваш функционалността на WP за import/export на цял блог
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

Marto

  • Участник
  • *****
  • Публикации: 92
    • Профил
    • WWW
Mysqldump encodings
« Отговор #6 -: Апр 21, 2007, 22:25 »
Даааа даааа .. само си помислих, че се е оправило. Пак важи онзи гаден проблем с "И" = "?" и "ш" = "??" '<img'>
Активен