SSH를 통해 악센트 문자가 포함된 SQL 파일 복사

SSH를 통해 악센트 문자가 포함된 SQL 파일 복사

서버 A에서 서버 B로 데이터베이스를 마이그레이션하려고 합니다.

데이터베이스는 mysql입니다. 데이터베이스에는 ç, ã é, ... 등과 같은 문자가 포함된 일부 레코드가 있습니다.

데이터베이스 인코딩은 UTF8입니다.

서버 A이렇게 수출해요

mysqldump -u root -p sis > sis3.sql  

그런 다음 (을 사용하여) 파일을 열었는데 vi문자가 정상이 아니었습니다. 그래서 나는 노력했다

 mysqldump -u root -p sis --default-character-set=utf8 > sis3.sql 

아직 아님. 그 다음에

 mysqldump -u root -p sis --default-character-set=latin1 > sis3.sql 

현재 파일~인 것 같다좋아요

복사

서버 B로의 복제는 다음을 사용하여 서버 B에서 수행됩니다.

scp -i p [email protected]:/home2/sis3.sql ~/

하지만 문자 세트를 서버 B에 복사할 때마다 파일이 제대로 작동하지 않습니다. "특수" 문자는 항상 잘못되었습니다.

세 가지 방법(latin1, utf8, 기본값 없음)으로 가져오기를 시도했지만 모두 오류가 발생했습니다.

나는 다음과 같이 가져옵니다 :

mysql -u root -p"pwdpwdpwd" --default-character-set=utf8 sis < sis3.sql 

물론 기본 문자 세트를 변경하십시오.

그러나 mysql을 가져오기 전과 마찬가지로 파일이 "손상"되었습니다. 이는 ssh를 통한 전송으로 인해 발생한 것일 수 있다고 생각했습니다.

이 문제 없이 mysql 데이터베이스를 전송할 수 있는 방법이 있습니까?

서버 정보

서버 A

Linux version 2.6.32-5-amd64 (Debian 2.6.32-48squeeze6) ([email protected]) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Tue May 13 16:34:35 UTC 2014
# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=

서버 B

Linux version 4.4.0-0.bpo.1-amd64 ([email protected]) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Debian 4.4.6-1~bpo8+1 (2016-03-20)
# locale
LANG=pt_BR.UTF-8
LANGUAGE=
LC_CTYPE="pt_BR.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="pt_BR.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="pt_BR.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=

답변1

다른 사람들에게 유용한 것을 찾았습니다.

http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion

문제는 latin1로 내보내고 모든 테이블이 utf8이므로 파일을 "set NAMES utf8"로 변경하는 것입니다.

이미 작업 중입니다.

답변2

  1. 터미널이나 터미널 에뮬레이터가 사용 중인지 확인하세요.UTF-8코딩.

    locale터미널 에뮬레이터의 구성이 아닌 셸의 구성을 덤프합니다.

    를 사용하면 --default-character-set=utf8출력이 인코딩됩니다 utf8. 따라서 서버 A의 터미널이 올바르게 표시되지 않으면 터미널 구성이 손상된 것입니다.

    예를 들어, gnome 터미널 메뉴에서 Terminal,Set Character Encoding

  2. 서버 A와 B에 있는 파일의 md5sum 체크섬이 동일하면 파일이 올바르게 전송되었음을 "확신"할 수 있습니다.

답변3

터미널 에뮬레이터와는 아무런 관련이 없습니다.

mysqldump -u 루트 -p sis --default-character-set=latin1 > sis3.sql

mysql -u root -p"pwdpwdpwd" --default-character-set=utf8 sis < sis3.sql

파일을 내보내는 데 사용한 것과 동일한 문자 집합을 사용하여 파일을 가져옵니다.

내보낸 파일에 표시되는 내용은 파일을 보는 데 사용하는 도구의 설정에 따라 달라집니다. 문제를 혼동하지 마십시오. mysql이 데이터를 해석하는 방법을 살펴보십시오. 백업이 큰 경우 더 작은 데이터 세트로 몇 가지 실험을 수행하십시오.

아마도 이것은 openssh일까요? 중간에 다른 소프트웨어를 사용하지 않는 한 파일은 전송 중에 수정되지 않습니다. md5sum 또는 유사한 방법을 사용하여 이를 확인할 수 있습니다.

관련 정보