И хотя в доке (из 2009) написано что
InterBase now supports 16-bit UNICODE_BE and UNICODE_LE as server character
sets.
These character sets cannot be used as client character sets.

Подключение с указанием этих кодовых страниц (к IB2009) проходит.

Вообщем, типа вот.

Подключение проходит. Но текст запроса выполнить не получается. Текст запроса явно не может быть в кодовой странице UNICODE_BE/UNICODE_LE. Как видно из ошибки эксперта - он не может найти таблицу. Значит весь запрос (в ASCII символах) он понимает, а имя таблицы видать хочет в UNICODE_xx формате. Вообщем, этой болезнью и FB страдает (для русских названий). Но тут какой то драматический случай - вообще ничего не видит.

-----
Хорошо. Нельзя так нельзя. Подключился в рекомендуемом UTF8.

Размеры текстовых колонок он не учитывают кодовую страницу подключения. То есть если у нас UCS2 символ превратится в 3-байтный UTF8, то запросто получаем переполнение буфера. Классика жанра - надо подключаться с использованием кодовой страницы хранения. А подключиться низя. Смотрим пункт #1

-----
Далее. Из эксперта в WIN1251 записал в VARCHAR UNICODE_LE, UNICODE_BE русские буквы.

Потом через IBProvider прочитал из в UTF8 - совпали
Попробовал прочитать из в NONE (тоже через IBProvider) - опять совпали. То бишь конверторы провайдером выбираются правильные.

Це чудо.

Но толку нет, потому что буферы не перерасчитываются. А потому реально работать не получится.

-----
Блобы.

Короче я их вставил. Но что, куда и в каком виде я вставил - сам не понял.

Но судя по увиденному - сервер (все так же) не перекодирует данные из кодовой страницы подключения в кодовую страницу хранения. И наоборот тоже. Но поскольку в UNICODE_LE/UNICODE_BE подключаться не получается - значит блобы идут ф топку.

-----
Массивы пробовать не стал. Хотя я думаю это единственный тип который бы заработал без проблем (через провайдер). Потому что я размеры буфером сам вычисляю.

-----
Короче мой смелый вывод по поводу этих двух кодовых страниц - ГУАНО.

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


Ответить