2017-01-10 6 views
2

터키어 로켈로 설정된 Windows 서버를 보유하고 있습니다. 내 Firebird DB는 터키어 문자가 포함 된 경로에 있습니다. "I/O 오류경로에서 비 ASCII 문자를 사용하는 Firebird 연결

: 나는이 예외가 열려고하면 내가

를 연결하는 C#으로 FirebirdClient을 사용하고

"user id=somename;password=somepwd;max pool size=200;min pool size=8; 
    connection lifetime=120000; 
    initial catalog=E:\\Açğıİîöşüûin\\Metabase\\metabase.fdb;port number=3050; 
    data source=127.0.0.1;server type=Default;packet size=8192;charset=UTF8;" 

:이처럼 내 연결 고통이 모습입니다 \ 파일 은 "CreateFile이 (개방) \"작업을 \ 중에 "E : \ AgiIsin \ 메타베이스 \ metabase.fdb \"\ 연구 \ n 오류 파일 열기 "

하는 동안

이름의 터키어 부분이 ANSI이면 DB가 제대로 작동합니다.

FB가 터키어 경로 이름을 존중할 수 있다면 가능한 모든 아이디어가 있습니까? ANSI 문자가 아닌 경로 이름 (예 : 키릴 문자, 아랍어, 유니 코드, UTF8)을 사용할 수 있습니까?

FB 버전 2.5.2

+0

어떤 Firebird 버전과 Firebird가 사용됩니까?그물 공급자 버전을 사용하고 있습니까? –

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx 터키어에는 다른 ANSI 및 OEM 코드 페이지가 있습니다. Windows는 기본적으로 Firebird Server와 같은 그래픽이 아닌 응용 프로그램에 대한 OEM 코드 페이지를 할당합니다. 일반 Win32 응용 프로그램을 사용하면 ANSI-> OEM 경로를 미리 코드 할 수 있지만 UTF-16 문자열을 사용하는 DotNet 응용 프로그램을 미리 코드 할 수 있다고 추측합니다. 그런 옵션이 없다고 생각합니다. 아마도 FirebirdClient 소스를 다운로드하고 해킹을 시도 할 수 있습니다 그것으로 작동하고 있는지 확인 –

+0

나는 FB 2.5.2를 사용하고있다 – user7399006

답변

1

역사적으로 ASCII 문자 만 지원하고, 즉 OS 로케일의 기본 문자 세트와 같은 경우에도 작동 연결 문자 집합의 문자를 사용하여 (나는 몇 가지 예외가 생각 , 특히 버전 2.5 이전의 UTF-8). 아쉽게도 ADO.net 공급자는 항상 UTF-8을 사용하여 데이터베이스 이름을 보냅니다.

Firebird 2.5 이후 데이터베이스 매개 변수 버퍼에 isc_dpb_utf8_filename 옵션이 포함되어 있고 Firebird ado.net 공급자가이 확장을 지원하면 UTF-8을 사용할 수 있습니다. 그래서이 버전을 지원하지 않는 Firebird ado.net 공급자의 이전 버전을 사용하거나 Firebird 2.1 이전 버전을 사용하고 있다고 가정합니다.

당신이 사용하는 경로를 조금 더 가깝게 보더라도 Firebird가 Windows에서하는 경로 정규화 중 일부를 실행하면 경로가 대문자와 비 닮은 점을 비교할 수 있습니다. 코드의 경로가 Açğıİîöşüûin이지만 오류 메시지가 A�giI��s��in (BTW : 내 시스템에 UTF 대체 문자가없고 AçgiIîösüûin를 표시합니다!)라는 메시지가 표시됩니다. 이는 적어도 정규화가 수행되었음을 나타냅니다. ğ ->gı ->i, İ ->Iş ->s 인 경우, 예를 들어 폴더 이름을 AçgiIîösüûin으로 변경하면 내 C# 코드에서 Açğıİîöşüûin을 사용할 때도 작동합니다. 이이 경로 정상화 관련이 있다는

내가 경로 D:\Temp\Açğıİîöşüûin\testdatabase.fdb를 사용하여 파이어 버드 3와 파이어 버드 2.5 데이터베이스를 열려고하면, 지원되지 않는 ODS 버전에 대한 결과 오류 메시지가 D:\TEMP\AÇGIIÎÖSÜÛIN\TESTDATABASE.FDB 같은 경로를보고 있다는 사실에 의해 뒷받침 될 것

사용 된 경로에주의를 기울여야하므로 ASCII로만 경로를 사용하거나 별칭을 사용하는 것이 좋습니다 (동일한 문제가 발생할 수 있음).

아마도 Firebird의 버그 일 수 있지만 확실하지 않습니다. Windows 자체가 초기 오류가 원래의 경우와 비슷하지만 정규화되어있을 가능성이 있습니다. firebird-devel 메일 링리스트에 질문을 게시하는 것을 고려해야합니다.

+0

.... 별명은 별명이 있어야만 그 문제를 다시 해결할 수있다. conf는 ANSI 또는 OEM 또는 UTF-8 코드 페이지로 채워질 수 있지만, 수정 후 적어도 C# 프로그램/제공자에 대한 특별한 요구 사항은 없습니다. –

+0

@ Arioch'The AFAIK 로켈 기본 문자 집합 (Windows의 경우 기존 로케일 Firebird 2.5 및 그 이전 버전, Firebird 3의 UTF-8에 대한 기본 afaik). –

+0

지금까지 모든 답변을 주셔서 감사합니다. isc_dpb_utf8_filename 옵션에 대한 참조가 많이 있지만 사용법은 다릅니다. idea? – user7399006

관련 문제