slyubez писал(а):Проверил на рабочем проекте. Теперь эти алиасы почему-то отображаются в ВЕРХНЕМ регистре и впридачу обрезаются в длине до 16 символов. Это точно не ограничение Firebird - в FIB+ с Delphi такого поведения не отмечал. С IBX на Delphi не работал уже очень давно и не касался алиасов полей, тем более у меня сейчас D2010 с непиленными под UTF8 компонентами IBX.
Для передачи информации к серверу и обратно, компоненты манипулируют записью TXSQLVAR (объявлена в IBHeader) через клиентскую библиотеку fbclient.* или fbembed.dll.
- Код: Выделить всё
TXSQLVAR = record
sqltype : Short; (** datatype of field **)
sqlscale : Short; (** scale factor **)
sqlsubtype : Short; (** datatype subtype - BLOBs **)
(** & text types only **)
sqllen : Short; (** length of data area **)
sqldata : PChar; (** address of data **)
sqlind : PShort; (** address of indicator **)
(** variable **)
sqlname_length : Short; (** length of sqlname field **)
(** name of field, name length + space for NULL **)
sqlname : array[0..31] of Char;
relname_length : Short; (** length of relation name **)
(** field's relation name + space for NULL **)
relname : array[0..31] of Char;
ownname_length : Short; (** length of owner name **)
(** relation's owner name + space for NULL **)
ownname : array[0..31] of Char;
aliasname_length : Short; (** length of alias name **)
(** relation's alias name + space for NULL **)
aliasname : array[0..31] of Char;
end; // TXSQLVAR
Как видно размер полей для передачи имен ограничен [0..31], а т.к. русские символы занимают в UTF8 - 2 байта, то соответственно русский алиас обрежется вдвое от указанной длины, заполнение структуры происходит на сервере, поэтому русские алиасы, для UTF-8 на клиенте, уже с сервера приходят обрезанными. На данный момент найти какую-то альтернативу решения проблемы довольно проблематично, поэтому могу только рекомендовать не использовать русские алиасы..