2011-10-05 4 views
0

나는 perl DBD :: Sybase 모듈을 사용하여 데이터를 가져 오는 MS SQL Server 2008 데이터베이스가 있습니다. 그러나 저작권 기호, 상표 기호 등의 일부 특수 문자가 DB에 제대로 가져 오지 않습니다. Perl은 이러한 모든 특수 문자를 물음표 문자로 변경하는 것으로 보입니다. 이 문제를 해결할 수있는 방법이 있습니까?Perl DBD를 사용하여 MS SQL Server에서 데이터를 가져올 때 특수 문자 처리

연결 문자열에 charset=utf8을 지정하려고했습니다. docsyb_enable_utf8 (bool) 설정을 언급,하지만 난 것을 시도 할 때마다, 나는 오류 얻을 : 내가 찾은

Can't locate object method "syb_enable_utf8" via package "DBI::db" 
+0

다음 내용을 반드시 읽어보십시오. http://perldoc.perl.org/perlunicode.html –

답변

1

하나의 솔루션이되었다 :

다음
use Encode qw(encode_utf8); 

, 어디서나 파일에 데이터를 기록하거나 그 밖의 다른 곳에서는 Encode::encode_utf8($data);

여기서 $data은 MSSQL에서 가져온 열/값입니다.

0

나는 DBD :: Sybase를 사용하지 않지만 a) 다른 DBD를 많이 사용하며 b) 현재 DBD에서 유니 코드 지원에 대한 정보를 수집 중입니다. 포드에 따르면 syb_enable_utf8을 사용할 때 최소한 OpenClient 15.x가 필요합니다. 15.x 이상을 사용하고 있습니까? 클라이언트가 15.x보다 작거나 DBD :: Sybase의 버전이 너무 오래된 경우 syb_enable_utf8이 정의되지 않았을 수 있습니다. 유감스럽게도 syb_enable_utf8을 추가하면 변경 사항 파일에서 볼 수 없습니다.

그러나 "메소드를 찾을 수 없습니다"라고 말하면 syb_enable_utf8은 메소드가 아니므로 힌트라고 생각합니다.이 속성은 포드의 속성 (Sybase 특정 속성 아래에 있음)입니다. 그래서 당신은 다음과 같이 처리 할 연결을 통해 연결 호출에 추가하거나 설정해야합니다

my $h = DBI->connect("dbi:Sybase:something","user","password", {syb_enable_utf8 => 1}); 

또는

$h->{syb_enable_utf8} = 1; 

또한 syb_enable_utf8이 때 발생하는 설명 포드의 비트를 읽어야합니다 UNIVARCHAR, UNICHAR 및 UNITEXT 열에 만 적용되는 문서에서 나타나는대로 설정됩니다.

마지막으로 데이터를 올바르게 삽입해야합니다. Perl에서 syb_enable_utf8 및 charset = utf8을 사용하여 삽입하지 않았고 쓰레기를 다시 삽입하기 전에 데이터가 Perl에서 적절한 유니 코드 문자가 아닌 것으로 추측됩니다.

Raze2dust는 귀하의 문제와 관련이 없지만 다른 곳에서 귀하의 데이터베이스에서 검색된 데이터를 작성하려는 경우주의해야합니다. 스크립트에 입력 된 모든 데이터를 디코딩하고 모든 데이터 출력을 인코딩해야합니다.