웹사이트 검색

데이터베이스를 내보낼 때 PowerShell의 mysqldump가 라틴어가 아닌 문자를 손상함(해결됨)


mysqldump는 데이터베이스 및 테이블 백업을 생성하기 위한 MySQL 유틸리티입니다. phpMyAdmin은 웹 인터페이스를 제공하지만 PHP 및 Apache와 같은 중간체의 제한으로 인해 더 느린 도구인 반면 mysqldump는 매우 큰 데이터를 백업하는 데 제한이 있습니다.

그러나 Windows에서 mysqldump에는 약간의 뉘앙스가 있습니다. 인코딩 작업에 대한 PowerShell의 특성으로 인해 내보낸 데이터베이스에서 모든 비라틴 문자가 손상될 수 있습니다. 이 문제는 CMD에서 볼 수 없지만 최신 버전의 Windows는 기본적으로 PowerShell을 사용하므로 해당 문제는 Windows에서 데이터베이스를 백업하기 위해 mysqldump를 실행하는 모든 사용자에게 영향을 미칩니다.

PowerShell 7에서 실행되는 다음 명령:

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

mysqldump(백업용)를 사용하여 모든 MySQL 데이터베이스를 내보낼 UTF-8 인코딩 all-databases_ps7.sql 파일을 생성합니다. 그러나 이러한 데이터베이스에서 라틴어가 아닌 모든 문자는 복구 불가능하게 손상됩니다!

즉, 키릴 문자 대신 다음과 같이 됩니다.

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

이 문제를 방지하려면 --result-file 옵션과 함께 mysqldump를 사용하십시오. 다음 명령은 데이터베이스를 올바른 인코딩으로 저장합니다.

.\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