Что в очередной раз подтверждает мысль - NONE подключение рулит. Правда, его надо уметь готовить :-)

Поделись своим рецептом с публикой. :-)

http://www.ibprovider.com/rus/documentation/charsets_collations.html

0. Компоненты должны юзать сведения о кодовых страницах, возвращаемых сервером. Для этого им понадобиться иметь собственный аналог INTL-а. У нас щас поддерживается 49 кодовых страниц. Осталось 3 штуки. 1 простая, 2 замысловатых.

1. Если пользователь работает с ASCII строками - то он должен указать свою кодовую страницу. Компоненты приводят загруженные данные к этой кодовой странице. Если пользователь получает данные в виде UNICODE - то это не актуально. См. #2.

2. Компоненты доступа должны уметь привязывать к NONE-колонкам какую нибуть осмысленную кодовую страницу. Например WIN1251.

3. Компоненты должны понимать мульти-чарсетные тексты запросов. В NONE подключении строки "с_именем_объекта_БД" должны конвертироваться в UNICODE_FSS (UTF8)

4. Клиент должен передавать текстовые данные только через параметры. Тогда можно будет их более менее корректно конвертировать. Когда API начнет принимать текст запросов в UNICODE (не зависимо от кодовой страницы подключения), тогда можно будеть на это правило забить. Впрочем, и на правило #3, тогда тоже можно будет забить.

------
IBProvider уже практически реализует все это пунты. То есть можно указать кодировку подключения NONE, в ctype_none указать как интерпретировать "без-чарсетные" данные, и не напрягать сервер вопросами конвертирования данных. Желательно, что бы это был сервер не ниже FB2.1, а лучше мой FB2.5 :-)

~400 тыс тестов для всяких извращенных комбинаций кодовых страниц (хранения, подключения, пользователя) вообщем-то гарантируют корректную работу. WIN1251 - точно оттестирован :-)

Коваленко Дмитрий.

PS. Не жалко :-)

Ответить