1. Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.
    Сокриј

MySQL - упатство за конвертирање (latin1, win1251, utf8)

Дискусија во форумот 'Microsoft SQL Server, MySQL, PostgreSQL, Oracle, S' започната од bobmkd, 19 Февруари 2012.

  1. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Упатствово се однесува на конверзија на кирилични податоци запишани во MySQL база со charset latin1 и collate latin1_swedish_ci кои биле внесени преку php web site со win 1251 encoding.

    Неодамна добив ваква база со барање да извршам конверзија на податоците заради користење на истите преку нов php web site, нормално со utf-8.

    Најпрво пробав да ги сменам сите varchar полиња во blob (како што прочитав по многу странски форуми), да ја алтерирам базата и табелите во utf8 па да ги сменам назад полињата во varchar но овој пат со utf8 encoding. При последниов чекор MySQL-oт ми враќаше warning и конверзијата беше неуспешна.

    Потоа изгубив два дена барајќи решение па еве го, можеби и на некого друг ќе му биде од помош.
    Постапката е за Windows 7 и за мене работеше без проблем.
    Во Control panel, Regional and language, format треба да е Macedonian и во Administrative табот под Language for non-unicode programs исто треба да е Macedonian

    НАЈПРВО НАПРАВИ БЕКАП КОПИЈА НА БАЗАТА!!!

    1. Од командна линија позоцоионирај се на локацијата на mysql console, внеси:

    CD C:\wamp\bin\mysql\mysql5.1.36\bin
    (локацијата на mysql конзолата, кај вас може да е различна и зависи од многу фактори и од верзијата на MySQL server)

    2. Внеси chcp 1251 (за да конзолата може да ги прикаже кириличните карактери)

    3. Внеси mysql -u[tvojot user] -p[tvojot password]

    4. Ќе добиеш prompt mysql> во кој ќе ги внесуваш наредбите

    5. Експортирај ги податоците во csv датотека, внеси:

    SELECT * INTO OUTFILE 'c:\\ime_na_folder\\ime_na_file.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' FROM [ime_na_tabela];

    6. Сега можеш да ги избришеш податоците од табелата:

    DELETE FROM [ime_na_tabela];

    7. Ја конвертираш таелата во UTF8:

    ALTER TABLE [ime_na_tabela] CONVERT TO CHARACTER SET utf8;

    8. Го отвараш csv фајлот со notepad++ или соодветен едитор (може и со обичен notepad) и го запишуваш како UTF-8, (во notepad правиш save as па долу бираш encoding UTF-8)
    Без овој чекор, MySQL јавува warning 1366 и ништо од конверзијата.

    9. Ги враќаш податоците со наредбата:

    LOAD DATA INFILE 'c:\\ime_na_folder\\ime_na_file.csv' replace INTO TABLE [ime_na_tabela] FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' ;
    И така за сите табели... Можеби може да се направи нешто слично за целата база но јас вака завршив работа.
    На крај може и базата да се конвертира во utf8 со ALTER DATABASE....
    Това би било... и ондак то.
     
  2. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
    Хахаха да, а? :)

    Нормално...

    Нешто ептен гадно си побркал ти, само Notepad++ и завршена работа, нема потреба од ниту еден чекор од погоре ;) Ама ок, чим си успеал и по подолгиот пат, фино...

    П.С. Нареден пат користи UTF-8 without BOM, во Notepad++ ;)
     
  3. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Може да сум побркал, ама не гледам како „само Notepad++ и завршена работа“ кога и MySQL базата, табелите и полињата треба да се преправат во UTF8 (затоа е ALTER нели), и потоа да се наполнат со истите податоци (кои затоа е се извесуваат во csv датотека па потоа се увезуваат од истата) но овој пат енкодирани со UTF8.

    Инаку, делот со „Во Control panel, Regional and language, format треба да е Macedonian и во Administrative табот под Language for non-unicode programs исто треба да е Macedonian“ го пишав бидејќи со дефолтните подесувања во windows-от ( English нели) не можев да ги видам кириличните податоци на локалнава машина, ни преку локално сетираниот php сајт, т.е. преку browser, па откако подесив како што пишав погоре, беше ОК.

    Сепак, доколку знаеш како, без експорт на податоците, без алтер на базата, табелите и полињата и без импорт (на тоа се однесуваат чекорите кои според тебе се непотребни), а само со notepad++ може да се заврши работа би било одлично со две реченици да го објасниш, за друг пат да не се мачам ни јас а ни некој друг кој би го имал истиот проблем.

    Јас лично однапред би ти се заблагодарил за трудот.
     
  4. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
    Во една реченица (ако не ја рачунаме оваа) :)

    Export во .sql, го отвораш во Notepad++ и правиш Convert to UTF-8 without BOM, правиш Find and Replace на тоа што треба, Save, правиш Import на тој .sql, и завршена работа ;)
     
  5. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Аха, а го проба ова или? Баш експорт во .sql (со mysqldump) :suprised: ? Чудно ама ова не успеваше (не само за мене, туку и за други луѓе кој го пробувале и пишале по други форуми), додека експорт во .csv (SELECT *) успеа. :)
    Инаку, во твојата „една реченица“ има неколку чекори од тие што во првиот пост ги означи како непотребни ;) , а и фалат некои без кои... тапа работа... (chcp 1251, ALTER на табелите и слично) НО како и да е, фала за трудот, иако некој почетник сигурно нема да се најде без упатството „чекор по чекор“, напредните корисници ќе пробаат со твојот совет (и ќе заглават со .sql датотека :) како и јас што заглавив)
     
  6. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
    Ок, ти си знаеш, јас ти кажав на кратко како јас го решавам тој проблем.

    Инаку напреден корисник, како што се окарактезира ти, не треба тек сега да го открие ова: “Во Control panel, Regional and language, format треба да е Macedonian и во Administrative табот под Language for non-unicode programs исто треба да е Macedonian“, што кажува многу за твоето искуство и знаење. Чим си стигнал да конвертираш во .csv, и мануелно да куцаш команди, не треба муабет понатаму :p

    Али ок, може твојот подолг пат на некој ќе му помогне да стигне до целта ;)
     
  7. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Во ред, тогаш да нагласам: упатствово е наменето за почетници (пошто тоа очигледно не беше јасно) и затоа е соџвакано и објаснето чекор по чекор, почнувајќи од потребните подесувања во regional settings (кое јас после 20 години развој на софтвер за windows сега го открив o_O) па до „мануелно куцање на команди“ :p кое, нели, е за почетници.
    За напредни корисници кои не користат конзола за куцање команди (мануелно) има само „една реченица“: експорт (не во .sql оти така под windows не вршите работа) во .csv, потоа во notepad++ convert to UTF-8 without BOM, ALTER на табелата и полињата во UTF8 (нормално пошто сте напредни користете некоја алатка за менаџирање на база а не мануелно куцање команди кои како напредни не ни мора да ги знаете) и потоа импорт во преправената табела.
    Е сега, со користење на реченицава ќе имате проблем: пошто сте напредни и не куцате во конзола значи дека ќе користите некоја алатка за менаџирање на база за да ги експортирате податоците арно ама, ни phpmyadmin ниту пак SQLYog Enterprise нема да ви завршат работа бидејќи експортираните податоци нема да чинат па ќе мора да се спуштите на ниво на почетници и да куцате (мануелно) команди а за тоа погледнете во упатството за почетници (оти нема „десен клик па експорт или пак копче „експорт“ во конзолата).
    Толку од мене... happy typing noobs :)
     
  8. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Ок, не знам како се претвори дискусијава во лична дисквалификација (што мене воопшто не ме засега) но јас нема да се спуштам до тоа ниво, само ќе кажам:
    Иронија (синоним на сарказам): изразување на мислење со користење на искази кој нормално имаат спротивно значење (може да се користат и смајлија) o_O
    Луѓе што не препознаваат иронија: ќе искористам еден твит на Ricky Gervais „People on Twitter who don't get irony have given me an idea for a new law. No one can own a smart phone that is actually smarter than them.“ :)
    Не држи да се преведува, иако не сите ќе ја разберат иронијата.

    Назад на темата
    Инаку, да се потрудеше да пробаш (а јас уште од првиот мој одговор се обидов да ти сугерирам да пробаш пред да коментираш - notepad++ па notepad++) ќе видеше што е разликата помеѓу експорт во .csv (дури и со користење на алатка за менаџирање, во позадина се сведува на sql SELECT наредба надополнета со команди свичеви како што стои во упатството) и експорт во .sql (што во позадина се изведува со mysqldump utility) и маааалце да погуглаше ќе сконташе дека тоа што го пишувам (дека mysqldump, т.е. експорт во .sql во ваков случај на запишани податоци преку веб сајт со win1251 енкодирање едноставо не ги експортира кириличните карактери исправно).
    Експортот со SELECT и со mysqldump различно работи и тоа не само што едниов дава само податоци (.csv) а другиов генерира и SQL код за креирање на базата и табелите заедно со insert команди за податоците, туку и од аспект на енкодирањето на податоците кое mysqldum
    Пишав „не во .sql оти така под windows не вршите работа“ затоа што јас го работев експортот под windows и не можам да тврдам дали под linux ќе работи или не (а немам време да го пробувам) т.е. дали ќе ги експортира кириличните карактери исправно.

    Се надевам дека конечно се разбравме.. а и да не, не е ништо страшно, битно е на некого да му се помогне да си заврши работа, т.е. „да споделиме знаење“ нели?
     
  9. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    ми измина времето за измена па морам тука да надополнам во делот „туку и од аспект на енкодирањето на податоците кое mysqldump го прави како што се запишани во полињата (испробано) а експортот со SELECT пробува да ги прикаже во согласност со подесувањата во regional settings и затоа во csv кирилицата си е исправна. (и тоа е испробано)
     
  10. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
    Тип, фактот што после 20 години развој на софтвер тек сега си дознал за Control Panel “финтата“, ми е доволен доказ за тоа колку си упатен во работите.

    Ти сфаќаш ли дека и .sql и .csv се уствари еден те ист формат на фајл, односно најобичен .txt ? Разликата е во екстензијата, и структурата на текстот што е внатре, инаку и двата типа на фајл имаат потполно ИСТ text container. А тоа како и дали ќе ти ги прикаже кириличните карактери, е работа на енкодингот на самиот фајл, а не на тоа дали бил .sql или .csv фајл.

    Земи .sql фајл и структурирај го со синтакса од .csv, ќе добиеш .csv фајл, само со .sql наставка. Смени ја наставката, и ќе добиеш чист .csv фајл. Истото важи и обратно.

    Нема потреба повеќе да коментирам, ти реков, браво што си успеал по подолгиот пат, се надевам ќе му се најде и на некој друг...

    Толку од мене.
     
  11. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Јас не мислев никому да докажувам колку сум упатен, намерата ми беше да споделам искуство, а твојата не знам што е :annoyed: пошто нити некому помогна ниту пак нешто разјасни туку на некој што ќе дојде на темава само ќе му биде понејасно o_O.
    Тип не знам што се замараш толку, па ти дојде да коментираш на тема за која не знаеш ама баш ништо, сега слободно можам да кажам такво нешто, бидејќи е очигледно дека од бази не знаеш ни „Б“, оние кои „мануелно куцаат команди“ се за тебе нубови, иронија не сфаќаш ни после експлицитно објаснување (инаку таа е реченицата со 20-те години), од notepad++ знаеш дека прави конверзија од едно во друго и.... па нема и.
    Објаснувањето дека и .sql и .csv се уствари еден те ист формат на фајл од аспект на тоа дека содржат текст е... не знам што :D
    само во овој контекст (експорт од база) не е точно и би било погрешно од мене да го оставам така па затоа се дообјаснувам.
    Немаше потреба ни од почеток да коментираш, кога не знаеш за што станува збор, прочита „конверзија“ знаеш дека notepad++ ја прави и реши да се покажеш... што мене не ми пречи воопшто ама сепак мора да те исправам каде што си далеку од темата, извини но така е.
     
  12. Xenor

    Xenor
    Intern

    812
    41
    12 Март 2009
    Wow kolku ne expertsko resenie od ekspert brat kaj gi citas rabotive so e so fintava:



    Daj ne zae*** ova e najz******** resenie, napravi uste od pocetok so UTF8 celata baza da bide i so ke se maltretiras da konvertiras voopsto...

    Eve dokaz zosto ne treba tolku macenje

    Over 650 languages UTF-8 (Unicode)
     
  13. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    А ти брат да читаше од почеток? или вие експертите само на крај читате? па пишав горе дека ваква ја добив базата и требаше да се исконвертира во utf8, ако некој ја направил во MySQL ver. 4.0 тогаш и не постоеше utf8.
    Јас не се декларирав никаде како експерт, прочитај и ќе видиш, а подесувањето во Regional and language по default е English, а кога веќе правам упатство ги ставам сите подесувања, во културниот свет така се прави оти не се сите „експерти“ нели? туку некој си ги оставил дефолтните подесувања па треба да се потсети да ги смени кога веќе има вакво барање за конвертирање на податоци (по 100 пат пишувам) внесени преку веб сајт со win1251 енкодинг во база со latin1 енкодинг.
     
  14. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
    Во ред, го сподели, ама не значи дека тоа искуство е единствениот начин, и сите треба да го следат упатството од тоа искуство, зошто друг начин нема... Ако ти не си успеал по пократкиот пат, не значи дека е Mission Impossible...
    Ти не знаеш што, тоа е и проблемот со тебе. Оваа реченица беше објаснување за да ја сфатиш основата на енкодингот на pure text format, ама џабе, ти си имаш некои свои убедувања, и овие основни работи за тебе се смешка, пошто ти си мастер, нели...
    Ок, ајде, гледам дека се инатиш, прави што сакаш, јас само се обидов да ти објаснам дека има многу поедноставни начини и пократки патеки за да стигнеш до една те иста цел, ама кога си тврдоглав и не сфаќаш што сакам да ти кажам, куцај си мануелно колку сакаш...
     
    На Xenor му/ѝ се допаѓа ова.
  15. Xenor

    Xenor
    Intern

    812
    41
    12 Март 2009
    Не вреди да читам пошо отепано ти е решението....
     
  16. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Ајде ме натеравте да ви демонстрирам, што и не е лошо:
    Подолу на сликата се наредбите за експортирање во csv и sql датотеки:

    [​IMG]

    Еве како изгледа кирилицата во sql датотеката:

    [​IMG]

    а еве како изгледа во csv датотеката:

    [​IMG]

    Се надевам дека сега е појасно, макар да за некои... се сомневам дека е
     
  17. Fatal1ty_

    Fatal1ty_
    Großmeister

    21,478
    25,531
    28 Февруари 2008
    Машко
    Experienced Web Developer
    Ве молам поштувајте ги останатите членови и дискутирајте како луѓе,а не кој е глуп кој не е.
    Ако сметате дека решението не е добро кажете како е ДОБРО.

    Фала.
     
  18. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    ти само квотираш и куцаш на слепо? што е лудница? декас таква ја добив базата? па во првиот пост пишав.

    Имаш во животот направено за web нешто? 90% од македонските страни до пред 7-8 години беа со win1251, претпоставувам дека тогаш си бил прво одделение па не знаеш. што не е страшно. Епа тогаш имаше MySQL 3 и 4 кој не подржување utf8 па се користеше latin1 кој ги прифаќаше кириличните карактери внесени преку веб страна со win1251.
     
  19. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Тоа де, тоа, еве јас на двајцата ќе ви пратам една mysql табела со податоци а вие најдете подобар начин да ја конверирате во utf8. За да не биде муабет на празно, за подоброто решение сум спремен да платам, да речеме 1.000 денари... или кажете колку.

    ОК?

    п.с. сум го оставил прееска password-от во сликата, па може и да ме хакирате, и за тоа ќе ви платам, знам јас дека знаењето не е бесплатно :D
     
  20. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
    Хахаха UTF-8 постои уште од 1993 год. а тоа ти е од пред 19 години, па сега ти види :)

    Не вреди веќе да се замарам тука, прави што сакаш...
     
  21. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    :D UTF-8 постои одамна, НО:

    "As of MySQL version 4.1, there are two new character sets for storing Unicode data:

    ucs2, the UCS-2 encoding of the Unicode character set using 16 bits per character

    utf8, a UTF-8 encoding of the Unicode character set using one to three bytes per character"

    извор: http://dev.mysql.com/doc/refman/4.1/en/charset-unicode.html

    А алфа верзијата на MySQL 4.1 излезе 2003 година

    извор: http://en.wikipedia.org/wiki/Mysql

    Вреди 1000 денари, ако се малце предложи ти цена, јас да знаев дека има спемни момци за оваа работа иче нема да губев 2 дена, најсериозна е понудава, оти оваа база ја направив ама можеби ќе дојде друга, па да си купам поедноставно решение.
     
  22. bobmkd

    bobmkd
    Gaining Experience

    361
    190
    18 ноември 2008
    Машко
    Понудата важи и за тебе xenor, гледам дека коментираш во други теми за MySQL, па пошто препознаваш отепано решение сигурно знаеш подобро, а јас сум расположен да платам за подоброто, нормално, некоја реална цена. Ете понудив 1.000 за една табела, мислам дека е топ цена, нели?

    Мене навистина ми треба побрзо и поедноставно решение, оти фирмата која бараше конверзија мислам дека има и други сајтови кои користат вакви бази.
     
  23. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
  24. Xenor

    Xenor
    Intern

    812
    41
    12 Март 2009
    PHP:
    <?php
            
    echo "------------------------------------------------------------<br/>";
            echo 
    "              MENUVANJE NA ENCODING<br/>";
            echo 
    "------------------------------------------------------------<br/>";
            
    $db mysql_connect('localhost','root',''); //ovde info za bazata
            
    if(!$db) echo "Ups....";
                
    mysql_select_db('test_conver'); //ime na baza
                
    $rez=mysql_query('SHOW TABLES'); // za zemanje na site tabeli
                
    while($tables mysql_fetch_array($rez)) {
                    foreach (
    $tables as $key => $value) { 
                        echo 
    "tabela: $value - izmeneta <br/>";
                        
    mysql_query("ALTER TABLE  $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
                        
    //ovde ke mozi i so switch za izbor na encoding
                
    }
            }
            echo 
    "Uspesno e smeneto...BUMPPPP.... troolll";
    ?>
    Nabrzina sega napraviv, samo nemam napraveno opcija za izbor na char-set i za backup ....me mrzese
     
  25. IVS

    IVS
    Баниран/a

    144
    57
    29 Јуни 2011
    Неее, сега кога ќе ги искомбинира iconv и твојот код, ќе направи револуција во конвертирањето, и “финтата“ со Control Panel ќе ја изгуби смислата на постоење :p
     

Сподели

Вчитување...