Mysqldump-ը PowerShell-ում փչացնում է ոչ լատինական նիշերը տվյալների բազան արտահանելիս (ԼՈՒԾՎԱԾ)


mysqldump-ը MySQL օգտակար ծրագիր է տվյալների բազայի և աղյուսակների կրկնօրինակներ ստեղծելու համար: Ի տարբերություն phpMyAdmin-ի, որը, թեև առաջարկում է վեբ ինտերֆեյս, ավելի դանդաղ գործիք է միջանկյալ գործիքների սահմանափակումների պատճառով, ինչպիսիք են PHP-ն և Apache-ն, mysqldump-ը շատ ավելի արդյունավետ գործիք է առանց շատ մեծ տվյալների կրկնօրինակման սահմանափակումներ:

Բայց Windows-ում mysqldump-ն ունի որոշ նրբերանգներ: Կոդավորումների հետ աշխատելու համար PowerShell-ի առանձնահատկությունների պատճառով բոլոր ոչ լատինական նիշերը կարող են վնասվել արտահանվող տվյալների բազաներում։ Այս խնդիրը չի երևում CMD-ում, սակայն Windows-ի վերջին տարբերակները լռելյայն օգտագործում են PowerShell-ը, ուստի խնդրո առարկա խնդիրը վերաբերում է բոլոր օգտատերերին, ովքեր գործարկում են mysqldump-ը՝ Windows-ի տվյալների բազաները կրկնօրինակելու համար:

Հետևյալ հրամանը, որը կատարվել է PowerShell 7-ում.

.\mysqldump.exe -u root --all-databases > all-databases_ps7.sql

Ստեղծում է UTF-8 կոդավորված all-databases_ps7.sql ֆայլ, որտեղ MySQL տվյալների բազաները կարտահանվեն mysqldump-ի միջոցով (պահուստավորման նպատակով): Բայց այս տվյալների բազաներում բոլոր ոչ լատինատառ նիշերը անդառնալիորեն կոռումպացված կլինեն:

Այսինքն, կիրիլիցայի փոխարեն դա կլինի մոտավորապես այսպիսին.

'╨Р╤А╨▒╨╕╤В╤А╨░╨╢╨╜╤Л╨╣ ╨┐╤Ա╨╛╤Ж╨╨╨Г╤Б╤╤Б: ╨╕ ╨║/╨Ъ.╨Ь. ╨Р╤А╤Б╨╗╨░╨╜╨╛╨▓, ╨Ф.╨е. ╨Т╨░╨╗╨╡╨╡╨▓, ╨а.╨Э. ╨У╨╕╨╝╨░╨╖╨

Այս խնդրից խուսափելու համար օգտագործեք mysqldump --result-file տարբերակով: Հետևյալ հրամանը կպահի տվյալների բազան ճիշտ կոդավորման մեջ.

.\mysqldump.exe -u root --all-databases --result-file=all-databases.sql

Կոդավորման խնդիրը շտկելու համար կարող եք նաև օգտագործել հետևյալ երկու հրամանների կառուցվածքը.

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8")
.\mysqldump.exe -u root --all-databases > all-databases.sql