2017-01-10 13 views
2

У меня установлен мой сервер Windows в турецком языке. Моя Firebird DB существует на пути, который включает в себя турецкие символы. Это то, что мое соединение жала выглядит следующим образом:Соединение Firebird с использованием символов, отличных от ASCII, в пути

"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;" 

Я использую FirebirdClient в C# для подключения

Когда я пытаюсь открыть, я получаю это исключение:

«ошибка ввода/вывода во время \ "CreateFile (открытый) \" операции для файла \ "E: \ AgiIsin \ Metabase \ metabase.fdb \" \ г \ nНомер ошибка при попытке открыть файл »

Если турецкая часть имени ANSI, DB open отлично работает.

Любые идеи, если это возможно, чтобы заставить FB уважать турецкое название пути? Можно ли использовать имя пути, содержащее ничего, кроме символов ANSI (например, кириллица, арабский, UNICODE, UTF8)?

FB версия 2.5.2

+0

Какая версия Firebird и какая Firebird ado.версию сетевого провайдера вы используете? –

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx Турецкий язык имеет разные кодовые страницы ANSI и OEM. Windows по умолчанию назначает кодовые страницы OEM для неграфических приложений, таких как Firebird Server. С обычным приложением Win32 я предполагаю, что вы можете предварительно перекодировать путь ANSI-> OEM, но с приложениями DotNet, используя строки UTF-16, я думаю, что такой опции нет ... Возможно, вы можете попробовать загрузить источники FirebirdClient и взломать этот хакер в него и посмотреть, будет ли это работать –

+0

Я использую FB 2.5.2 – user7399006

ответ

1

Исторически только символы ASCII поддерживаются, и использование символов в наборе символов соединения также будет работать, если это так же, как набор ОС локали символов по умолчанию (я считаю, что есть некоторые исключения , особенно с UTF-8 в версии до 2.5). К сожалению, поставщик ADO.net всегда использует UTF-8 для отправки имени базы данных.

Поскольку Firebird 2.5 можно использовать UTF-8, если буфер параметров базы данных содержит параметр isc_dpb_utf8_filename, а поставщик Firebird ado.net поддерживает это расширение. Поэтому я предполагаю, что вы либо используете старую версию провайдера 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, она работает, даже когда я использую Açğıİîöşüûin в моем коде C#.

То, что это связанно с нормализацией пути, кажется, подтверждается тем фактом, что, когда я пытаюсь открыть Firebird 2.5 базы данных Firebird 3, используя путь D:\Temp\Açğıİîöşüûin\testdatabase.fdb, полученное сообщение об ошибке о неподдерживаемом ODS версии сообщает путь как D:\TEMP\AÇGIIÎÖSÜÛIN\TESTDATABASE.FDB

Похоже, что вам нужно быть осторожным с используемым путем, я предлагаю вам использовать путь только с ASCII или попытаться использовать псевдоним (но это, вероятно, будет иметь ту же проблему).

Возможно, это была ошибка в Firebird, но я не уверен в этом: возможно, что сама Windows выполняет аналогичную нормализацию, поскольку исходная ошибка в исходном случае, но нормализована. Вы должны рассмотреть вопрос о отправке вопроса в список рассылки firebird-devel.

+0

.... псевдонимы, возможно, снова вызовут эту проблему, должны быть псевдонимы. conf быть заполнены в кодировке ANSI или OEM или UTF-8? Но по крайней мере после ее исправления не было бы особых требований для программы/провайдера C# –

+0

@ Arioch'A AFAIK набор символов по умолчанию для локали (в случае Windows устаревшая локаль default afaik) для Firebird 2.5 и ранее, UTF-8 для Firebird 3, но да, это грязно. –

+0

Спасибо за все ответы. Я нахожу много ссылок на WHAT isc_dpb_utf8_filename, но КАК его использовать. идеи? – user7399006