powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Длина UNICODE_FSS
17 сообщений из 17, страница 1 из 1
Длина UNICODE_FSS
    #32162368
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

IBExpert, Firebird 1.0:

никак не пойму, как работает unicode в Interbase. Сделал домен:

Код: plaintext
CREATE DOMAIN  "val"  AS VARCHAR( 24 ) CHARACTER SET UNICODE_FSS;


В доступных мне pdfах прочитал, что это длина в символах, байтов же может поле занимать в три раза больше (в зависимости от символа, используется до трех байт на символ). Это я понял так, что используется UTF-8, где для английских букв 1 байт, для русских 2, для китайских 3.

Сделал таблицу, где одно из полей этого домена. Ввожу туда данные (пользуюсь IDExpertом и IBConcolем). И, о чудо, мне удается ввесли ровно 72 буквы, как русские, так и английские! Если я ввожу букву, например, "а" с ударением, то потом оно показывает ее как просто "а". :(

Как можно объяснить такое поведение? Эти клиенты вводят мои буквы в поле в кодировке Win1251, чтоли, поэтому их влазит в 3 раза больше? И если я посмотрю на содержимое поля как на Unicode UTF-8, у меня получится каша?

Спасибо за ответ без букв rtfm! :) К обоим клиентам справка, мягко говоря, бедная, по Firebirdу тоьлко набор pdf, не похожий на те мануалы, к которым я привык.

Ф.
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32165054
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой сложный вопрос я задал, никто не знает ответ!

Кто-нибудь пользуется unicodом-то? или это не модно? :-)))
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32170418
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю дискуссию с самим собой - как "человек дождя" :)

Почитал здесь рассуждения г-на Вальдерамы (кстати, это не колумбийский футболист случайно?):

A Comparison of SQL Server and InterBase Datatypes and Some Other Issues

Насколько я понял, клиенты подключаются используя чарсет базы (у меня - win1251), может быть, поэтому ibexpert видит все текстовые поля как win1251, хоть и указано, что поля юникод_фсс.

Правда, это написано про ODBC и OLEDB, а ibexpert вроде как говорят, общается с сервером напрямую.

Ну неужели никто ничего не знает??

Ф.

Зы. Вот Вальдерама пишет: For unknown reasons to me, UNICODE in InterBase requires three bytes per character. А я-то знаю, почему! См. The Unicode HOWTO: Introduction , про UTF-8
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32173482
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рассказываю, кому интересно.

Попробовал войти так называемым Database Pilotом, который с JBuilderом поставляется (программа на Javе). Драйвер JayBird. Урл с указанием кодировки:

Код: plaintext
1.
jdbc:firebirdsql:localhost/ 3050 :C:\Documents and Settings\fedd\Мои
документы\Work\firebird try\UNICODETRY.GDB?lc_ctype=UNICODE_FSS


В таблице одно поле charset unicode_fss. Так вот, если я ввожу в таблицу английские буквы, они в ibexpertе отображаются также, а если русские, то в ibexpertе они превращаются в мусор, который и скопировать сюда страшно.

Правда, второе поле, которое не юникод, а win1251, вобще не удалось заполнить.

Я так понимаю, никто из понтовых знатоков с юникодом не работает, раз никто не поддерживает топик. Единственный совет, который они дают ( здесь ) - это не писать русские буквы из "нормального" ibexpertа в хранимые процедуры: видите ли, interbase хранит их в никому непонятном и не нужном юникоде.

Такие дела.
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32173627
noir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert с юникодом не работает. Длина поля задаеться, AFAIK не в байтах, а в символах. Байты - это для прикидок размера базы...
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32175589
Elias
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to fedd: Спасибо за познавательную информацию.

to all: А как в кодировке UNICODE_FSS с COLLATE и UPPER? Все ли работает правильно хотя бы для русских букв.
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32175655
Elias
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати нашел вот здесь:

http://community.borland.com/article/0,1410,27217,00.html

что UNICODE_FSS встроено в сам Interbase, правда RDB$COLLATION_ID для него = 0. Это нормально?

Думаю в Firebird так же с UNICODE как и в Interbase 6, для которого написана эта статья.
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32175658
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я еще не пробовал UPPER, но там же дальше сказано в п. 10, что the default collations for these (ASCII, NONE, OCTETS, and UNICODE_FSS) character sets are also implemented within the engine. Наверно, если есть Collation, то и UPPER будет работать (система знает, что A=а и т.д).

Когда создаешь поле UNICODE_FSS, то можно указать к нему и Collation. Но выбор только из одного пункта - UNICODE_FSS. Для русского языка, надеюсь, это будет работать, если они не поленились настроить для нелатинских языков соответсвие большая/маленькая буква. Надо будет попробовать.

(А вот например в литовском языке, если я правильно ошибаюсь, где Y идет за I, поскольку Collation только один, сортировать будет как у всех остальных западноевропейцев)
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32176142
Привет!

Да, с UNICODE_FSS почти никто не работает.

Прежде всего, потому что клиентские библиотеки странно поддерживают его.
Единственный, кто полностью поддерживает UNICODE, это IBProvider от Коваленко Дмитрия.
Все Дельфевые библиотеки вроде бы работают, но не совсем так, что и было обнаружено уважемым fedd'ом.

Что касается проверок в IBExpert в ГРИДАХ и с помощью приложений на Дельфи, то они маст дай :), потому что дельфевые библиотеки не поддерживают нормально его, как уже было сказано, а IBExpert написан на основе какой-то версии FIBPlus.

Ситуация с ЮНИКОДОМ достаточно подробно описана в главе "Русификация InterBase" в моей книге.

Он динамически определяет, сколько байт нужно для хранения символа. В результате в поле можно затолкать "больше", чем его размер. (больше не зря взято в кавычки :) )

Вот пример - берем таблицу в юникодовом чарсете с полем из 10 символов:

Код: plaintext
1.
2.
3.
4.
5.
SET NAMES UNICODE_FSS;


CREATE TABLE UNI (
    V  VARCHAR( 10 )
);


вставляем данные вот так (все видят, что там 13 символов? ):
Код: plaintext
1.
2.
insert into uni (v)
values
('1234567890123');


Выбираем записи и видим:
Код: plaintext
1.
V
 1234567890123 



Вот такие пироги :)

С уважением,
Алексей Ковязин.
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32176247
noir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юникод в IB нормально поддерживаеться Java, лично с этим работал, глюков не видел. А про длину - интересно...
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32176265
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей, здравствуйте,

вашу книгу купил, но до главы "Русификация" еще не дочитал. Но я понял из pdfов, которые к серверу прилагались, что в CHAR(10) поместятся 30 английских букв и других знаков из ASCII, и догадываюсь, что только 15 русских букв.

Юникод я просто люблю. Я веб-программист, и приходится делать многоязычные сайты. Если использовать юникод, смогу сделать сайт даже на коптском

И делаю все это на Джаве. Вот пока надеюсь, что Джавные драйвера будут умно работать с юникодом (пока мои надежды оправдываются моим маленьким опытом с Database Pilotом из поставки JBuilderа) - по крайней мере с теми буквами, которые передаются 2-мя байтами а не тремя.

Вот когда придется в мои UDF строки поиска на коптском передавать - вот тут мне придется постичь как оно работает до самого конца!
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32176358
Elias
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кто-нибудь из API на С с UNICODE работал? Как там выставлять у XSQLDA поля sqltype и понимает ли он правильно wchar в поле sqldata или нужно конвертить как-то?

Если есть пример кода, поделитесь, пожалуйста.
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32176758
Привет!

2fedd
Да я и сам на java сейчас работаю. Но от привычек не отказываюсь - win1251. :)

2Elias
Ты имеешь в виду писать непосредственно на IB API? Это само по себе гемор, а как туда юникод прикрутить. возьми уж FreeIBProvider и вперед.

WBR,
Alexey
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32176800
Elias
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Алексей Ковязин

Спасибо но, разные варианты были рассмотрены и было выбрано написание на С++ на IB API. Так что тут ничего не изменишь.

2All

Собственно, продолжает интересовать вопрос: как?
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32176810
noir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WIN1251 - это здорово, но не тогда, когда в базе лежат данные на нескольких языках сразу, причем в одних и тех же таблицах.
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32185985
Elias
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, насчет работы с UNICODE в IB API.

Все работает, нужно сделать немного телодвижений:

- при соединении с IB: isc_attach_database() нужно задавать DPB c указанным параметром isc_dpb_lc_ctype со значением UNICODE_FSS, что собственно задает client character set и влияет на transliteration. Если не задать, будет говорить, что не может сделать этот transliteration.
- задавать нужные поля с CHARACTER SET UNICODE_FSS - ну это очевидно
- конвертить из USC2 в UTF8 при передаче строк и обратно при получении. Это самое сложное. Если пишется код под Windows, то можно использовать функции WideCharToMultiByte и MultiByteToWideChar с параметром CodePage=CP_UTF8, если пишется переносимый вариант, то путей множество - каждая уважающая себя библиотека, особенно для работы с инетом, реализует такие функции; или можно взять код на сайте www.unicode.org
...
Рейтинг: 0 / 0
Длина UNICODE_FSS
    #32186876
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Elias,

видимо, тоже самое надо будет делать при написании UDF. Чтобы моя функция разбирала юникодную строку, мне надо будет конвертить ее, например, в двухбайтный char.

Джавный же клиент, если пользоваться JayBirdом, кажется работает корректно, как показал мой опыт (с тем же lc_ctype=UNICODE_FSS)

К сожалению, нет времени мне засесть, когда я дойду до этого, я продолжу топик, и поделимся опытом.

Ф.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Длина UNICODE_FSS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]