2010-04-13 3 views
1

다음 작업을 수행하고 있습니다.데이터베이스 쿼리로 문자 인코딩을 유지하는 방법

1) 데이터베이스를 내보내고 dump.sql 파일에 저장하고 있습니다. 2) 파일은 PHP ftp를 통해 다른 서버로 전송됩니다. 3) 파일이 성공적으로 전송되면 관리자는 새 호스트에서 'dbtransfer'스크립트를 실행할 수 있습니다. 4)이 스크립트는 스크립트를 압축하여 줄 단위로 쿼리를 실행합니다.

위대한 작품 - 그러나 외국어 인코딩에 문제가 있습니다. 우리는 UTF-8을 사용하고 있습니다.

1 단계 :이 파일은 UTF-8 형식으로되어 있습니다. 3 단계 : mb_check_encoding()을 사용하여 dump.sql 파일의 내용을 테스트 할 때. 문자열은 UTF-8로 되돌아옵니다. 4 단계 : utf8_general_ci 인코딩을 사용하여 테이블을 만듭니다. 정보가 덤프됩니다.

전송 후 테이블을 확인할 때 'Ã, Ã, ‡, ¶, Ã, Ã, Ã, Â, Ä ±, Ä °, ÅŸ, Åž , ÄŸ, Äž '. UTF-8 문자열이 데이터베이스에 들어갈 때 인코딩을 잃을 수있는 방법을 이해하지 못합니다. 단계가 빠졌습니까? 문자열이 UTF-8로 구문 분석되는지 확인하기 위해 일종의 함수를 실행해야합니까?

일단 시스템이 설치되면 외국어 쿼리를 저장할 수 있습니다. 그것은 엉망이되고있는 전송 일뿐입니다.

아이디어가 있으십니까?

답변

1

이 모든 단계를 어떻게 수행하는지 명확하지 않지만 한 번 시도해보십시오.

먼저 문자 세트와 관련된 모든 데이터베이스 연결 설정이 utf-8로 설정되어 있는지 확인하십시오. 데이터베이스쪽에는 몇 가지가 있으며 클라이언트쪽에는 몇 가지가 있습니다. 둘째

, 데이터를 삽입하기 전에 다음 쿼리 수행

SET NAMES 'utf8'; 
1

아마도 당신은 MySQL에 당신이 UTF-8로 말하고 있다는 것을 말하지 않았을 것입니다. 연결에 잘못된 문자가 있습니다. 이를 위해 mysql_set_charset 함수를 사용하십시오.

또한 utf8_general_ci는 인코딩이 아니므로 데이터 정렬입니다. 즉, 값을 비교할 때 (정렬시 포함) 해당 열을 처리하는 방법 만 MySQL에 알려줍니다.

2

가 내가 항상 확인 연결이 UTF-8을 사용하기 위해 연결 개체에 다음과 같은 쿼리를 실행 PHP에서 DB에 연결 한 후을 :

$pdo->exec('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\''); 

또 다른 옵션은 대상 테이블이 UTF-8이 아니어야한다는 것입니다.

관련 문제