Что в очередной раз подтверждает мысль - 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. Не жалко :-)