1. 질문:
SQLServer2000의 테이블 데이터를 MySQL5로 가져와야 합니다. SQLServer2000 테이블의 이름은 중국어 간체로 지정됩니다. 필드 이름으로 중국어를 사용합니다). 실제로 작업은 SQL Server의 레코드를 쿼리하여 MySQL에 삽입하는 것입니다. 선택한 스크립팅 언어는 PHP입니다. PHP는 MSSQL 및 MySQL 확장을 열어 두 데이터베이스를 모두 쉽게 작동할 수 있습니다.
SQLServer에 있는 테이블의 필드명이 중국어로 되어 있는 문제가 발생합니다. 작성된 쿼리문을 SQLServe에서 테스트하면 레코드가 반환되고, PHP의 MSSQL 확장 쿼리를 사용하면 오류가 보고됩니다.
인터넷에서 정보를 확인해 보니 온라인에는 관련 정보가 많지 않습니다. 많은 네티즌들은 PHP의 MSSQL 확장이 SQL 문에서 한자를 지원하지 않는다고 생각합니다. 정보를 확인한 결과, PHP의 MSSQL은 SQL에서 중국어 문을 지원합니다. 대부분의 오류 보고 문제는 인코딩 문제로 인해 발생합니다. 인코딩 데이터베이스와 인코딩이 쿼리 문의 인코딩과 일치하지 않아 SQL Server 쿼리 문의 중국어 부분이 깨져서 쿼리가 실패합니다.
2. 해결 방법:
이유를 파악한 후 분석하여 해결하고 일관성 없는 코딩 문제인지 확인합니다. 솔루션은 다음 단계로 구분됩니다.
1. SQLServer 데이터베이스의 인코딩이 GBK인지 확인합니다.
2. 현재 PHP 스크립트 파일의 인코딩이 UTF-8인지 확인하세요.
3. SQL 쿼리문의 인코딩을 변환합니다.
보충: 일부 네티즌들은 데이터베이스 인코딩과 일치하도록 PHP 스크립트 파일의 인코딩을 변환해야 한다고 언급했습니다. 실제로 이 단계는 필요하지 않습니다. 단지 SQL 문이 인코딩과 일치하는지 확인하세요. 변환할 필요가 없는 이유는 PHP 스크립트 파일에 다른 PHP 스크립트가 포함되어 있으면 모든 포함 또는 필수 스크립트 파일의 인코딩도 변환해야 하기 때문입니다. 그렇지 않으면 PHP 스크립트 인코딩이 수행되지 않습니다. 상호 연관된 파일이 많으면 문제가 발생하고 문제가 복잡해지기 쉽습니다.
세 번째 계획:
SQL을 연산하기 전에 SQL 문 인코딩을 변환하는 변환 함수를 작성하세요. 내 샘플 코드는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
//인코딩 변환 함수
function utf8togb($s) {
return iconv('utf-8', 'gbk // IGNORE', $s); // 변환할 수 없는 문자가 나타나면 IGNORE 매개변수가 무시됩니다.
}
//다음 작업 및 인코딩을 용이하게 하기 위해 모든 중국어 필드를 영어 별칭으로 바꾸는 것이 좋습니다. 변환 및 기타 문제
$sql="SELECT [id], [column](typeid), [topic](제목), [author](저자), Convert(text, [text]) as body FROM [article table]; ";
$ sql = utf8togb($sql);