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

Marto

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

luda_glawa

  • Напреднали
  • *****
  • Публикации: 652
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Mysqldump encodings
« Отговор #3 -: Apr 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 -: Apr 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 -: Apr 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 -: Apr 21, 2007, 22:25 »
Даааа даааа .. само си помислих, че се е оправило. Пак важи онзи гаден проблем с "И" = "?" и "ш" = "??" '<img'>
Активен