mysqldump dalam PowerShell merosakkan aksara bukan Latin apabila mengeksport pangkalan data (SOLVED)


mysqldump ialah utiliti MySQL untuk membuat sandaran pangkalan data dan jadual. Tidak seperti phpMyAdmin, yang, walaupun menawarkan antara muka web, adalah alat yang lebih perlahan disebabkan oleh batasan perantaraan seperti PHP dan Apache, mysqldump ialah alat yang lebih cekap tanpa had untuk membuat sandaran data yang sangat besar.

Tetapi pada Windows, mysqldump mempunyai beberapa nuansa. Disebabkan oleh keanehan PowerShell untuk bekerja dengan pengekodan, semua aksara bukan Latin boleh rosak dalam pangkalan data yang dieksport. Isu ini tidak dilihat dalam CMD, tetapi versi Windows terkini menggunakan PowerShell secara lalai, jadi isu yang dipersoalkan mempengaruhi semua pengguna yang menjalankan mysqldump untuk membuat sandaran pangkalan data dalam Windows.

Perintah berikut, dilaksanakan dalam PowerShell 7:

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

Mencipta fail all-databases_ps7.sql yang dikodkan UTF-8 di mana semua pangkalan data MySQL akan dieksport menggunakan mysqldump (untuk tujuan sandaran). Tetapi dalam pangkalan data ini semua aksara bukan Latin akan rosak secara tidak dapat dipulihkan!

Iaitu, bukannya Cyrillic, ia akan menjadi seperti ini:

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

Untuk mengelakkan masalah ini, gunakan mysqldump dengan pilihan --result-file. Perintah berikut akan menyimpan pangkalan data dalam pengekodan yang betul:

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

Anda juga boleh menggunakan binaan dua arahan berikut untuk menyelesaikan masalah pengekodan:

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