"포르투갈어"데이터베이스에서 npgsql을 사용하여 일부 행을 선택할 수 없습니다.

c# dapper encoding npgsql postgresql

문제

"SQL_ASCII"및 "template0"템플릿으로 만든 postgresql 데이터베이스가 있습니다. 그것은 포르투갈어로 데이터를 보유하고 있으므로 "NÃ £ o", "Feijão", "AvÃ'"와 같은 데이터가 있습니다. 이러한 종류의 문자가있는 행을 검색하려고하면 "~ ^"이 작동하지 않습니다. 그렇지 않으면 작동합니다.

오류 :

  • "열 6 구문 분석 오류 (sempresa = 0 - 문자열)"}
  • 메시지 = "유니 코드에 지정된 코드 페이지의 인덱스 0에서 바이트 [C3]을 변환 할 수 없습니다."

나는 Npgsql과 Dapper를 사용하고있다.

<packages>
  <package id="Dapper" version="1.50.2" targetFramework="net45" />
  <package id="Npgsql" version="3.1.7" targetFramework="net45" />
</packages>

나는 많은 것을 수색했지만 아무것도 작동하지 않는다. 난 노력 했어:

연결 문자열에서 클라이언트 인코딩 설정하기 :

var sqlBuilder = new NpgsqlConnectionStringBuilder
                {
                    Host = host,
                    Database = database,
                    Username = user,
                    Password = password,
                    Pooling = false,
                    ClientEncoding = "SQL_ASCII" 
                    // I also tried "UNICODE", "utf8", "win-1252"
                };

또한 비 쿼리 명령을 실행하여 선택하기 전에 enconding을 변경하려고했습니다.

 // I tried a lot of encondings: SQL_ASCII, win-1252, unicode
 connection.Execute("set client_encoding = 'SQL_ASCII'");

 var data = connection.Query<T>(strSQL);

필자는 데이터베이스 인코딩을 변경하거나 데이터베이스를 다시 생성 할 수 없으며 많은 양의 프로덕션 데이터베이스에 대해 응용 프로그램이 실행됩니다.

나는 아무도 다른 질문들로 해결하려고 정말로 시도했지만, 내가 발견 한 것은 아무것도 발견하지 못했던 중복 된 죄 (sinse)로서이 질문을 표시하기를 희망한다.

수락 된 답변

Npgsql에 UTF8이 아닌 인코딩에 대한 지원을 추가했습니다. SQL_ASCII로 데이터베이스를 만들고 비 ASCII 문자가 포함되어 있으며 인코딩 변경이 불가능한 특수한 경우에만 사용해야합니다.

필자는이 지원을 다음 패치 버전 인 3.1.8에 백 포트했습니다 (충분히 무해한 것으로 보입니다). 현재 서버를 구축하는 데는 몇 가지 문제가 있습니다. 그러나 며칠을 기다리는 경우 http://myget.org/gallery/npgsql 에서 새 지원과 함께 사용할 수있는 3.1.8의 CI 패키지가 있어야합니다. 업데이트 / 진행에 대한 자세한 내용은 https://github.com/npgsql/npgsql/issues/392 를 참조 하십시오 .



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.