|
|
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, IBExpert, Firebird 1.0: никак не пойму, как работает unicode в Interbase. Сделал домен: Код: plaintext В доступных мне pdfах прочитал, что это длина в символах, байтов же может поле занимать в три раза больше (в зависимости от символа, используется до трех байт на символ). Это я понял так, что используется UTF-8, где для английских букв 1 байт, для русских 2, для китайских 3. Сделал таблицу, где одно из полей этого домена. Ввожу туда данные (пользуюсь IDExpertом и IBConcolем). И, о чудо, мне удается ввесли ровно 72 буквы, как русские, так и английские! Если я ввожу букву, например, "а" с ударением, то потом оно показывает ее как просто "а". :( Как можно объяснить такое поведение? Эти клиенты вводят мои буквы в поле в кодировке Win1251, чтоли, поэтому их влазит в 3 раза больше? И если я посмотрю на содержимое поля как на Unicode UTF-8, у меня получится каша? Спасибо за ответ без букв rtfm! :) К обоим клиентам справка, мягко говоря, бедная, по Firebirdу тоьлко набор pdf, не похожий на те мануалы, к которым я привык. Ф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2003, 20:24 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Какой сложный вопрос я задал, никто не знает ответ! Кто-нибудь пользуется unicodом-то? или это не модно? :-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2003, 13:46 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Продолжаю дискуссию с самим собой - как "человек дождя" :) Почитал здесь рассуждения г-на Вальдерамы (кстати, это не колумбийский футболист случайно?): 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 11:20 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Рассказываю, кому интересно. Попробовал войти так называемым Database Pilotом, который с JBuilderом поставляется (программа на Javе). Драйвер JayBird. Урл с указанием кодировки: Код: plaintext 1. В таблице одно поле charset unicode_fss. Так вот, если я ввожу в таблицу английские буквы, они в ibexpertе отображаются также, а если русские, то в ibexpertе они превращаются в мусор, который и скопировать сюда страшно. Правда, второе поле, которое не юникод, а win1251, вобще не удалось заполнить. Я так понимаю, никто из понтовых знатоков с юникодом не работает, раз никто не поддерживает топик. Единственный совет, который они дают ( здесь ) - это не писать русские буквы из "нормального" ibexpertа в хранимые процедуры: видите ли, interbase хранит их в никому непонятном и не нужном юникоде. Такие дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2003, 23:54 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
IBExpert с юникодом не работает. Длина поля задаеться, AFAIK не в байтах, а в символах. Байты - это для прикидок размера базы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2003, 00:50 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
to fedd: Спасибо за познавательную информацию. to all: А как в кодировке UNICODE_FSS с COLLATE и UPPER? Все ли работает правильно хотя бы для русских букв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 18:27 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Кстати нашел вот здесь: http://community.borland.com/article/0,1410,27217,00.html что UNICODE_FSS встроено в сам Interbase, правда RDB$COLLATION_ID для него = 0. Это нормально? Думаю в Firebird так же с UNICODE как и в Interbase 6, для которого написана эта статья. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 19:39 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Я еще не пробовал 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 только один, сортировать будет как у всех остальных западноевропейцев) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 19:55 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Привет! Да, с UNICODE_FSS почти никто не работает. Прежде всего, потому что клиентские библиотеки странно поддерживают его. Единственный, кто полностью поддерживает UNICODE, это IBProvider от Коваленко Дмитрия. Все Дельфевые библиотеки вроде бы работают, но не совсем так, что и было обнаружено уважемым fedd'ом. Что касается проверок в IBExpert в ГРИДАХ и с помощью приложений на Дельфи, то они маст дай :), потому что дельфевые библиотеки не поддерживают нормально его, как уже было сказано, а IBExpert написан на основе какой-то версии FIBPlus. Ситуация с ЮНИКОДОМ достаточно подробно описана в главе "Русификация InterBase" в моей книге. Он динамически определяет, сколько байт нужно для хранения символа. В результате в поле можно затолкать "больше", чем его размер. (больше не зря взято в кавычки :) ) Вот пример - берем таблицу в юникодовом чарсете с полем из 10 символов: Код: plaintext 1. 2. 3. 4. 5. вставляем данные вот так (все видят, что там 13 символов? ): Код: plaintext 1. 2. Выбираем записи и видим: Код: plaintext 1. Вот такие пироги :) С уважением, Алексей Ковязин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 12:59 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Юникод в IB нормально поддерживаеться Java, лично с этим работал, глюков не видел. А про длину - интересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 13:53 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Алексей, здравствуйте, вашу книгу купил, но до главы "Русификация" еще не дочитал. Но я понял из pdfов, которые к серверу прилагались, что в CHAR(10) поместятся 30 английских букв и других знаков из ASCII, и догадываюсь, что только 15 русских букв. Юникод я просто люблю. Я веб-программист, и приходится делать многоязычные сайты. Если использовать юникод, смогу сделать сайт даже на коптском И делаю все это на Джаве. Вот пока надеюсь, что Джавные драйвера будут умно работать с юникодом (пока мои надежды оправдываются моим маленьким опытом с Database Pilotом из поставки JBuilderа) - по крайней мере с теми буквами, которые передаются 2-мя байтами а не тремя. Вот когда придется в мои UDF строки поиска на коптском передавать - вот тут мне придется постичь как оно работает до самого конца! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 13:59 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
А кто-нибудь из API на С с UNICODE работал? Как там выставлять у XSQLDA поля sqltype и понимает ли он правильно wchar в поле sqldata или нужно конвертить как-то? Если есть пример кода, поделитесь, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 14:50 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Привет! 2fedd Да я и сам на java сейчас работаю. Но от привычек не отказываюсь - win1251. :) 2Elias Ты имеешь в виду писать непосредственно на IB API? Это само по себе гемор, а как туда юникод прикрутить. возьми уж FreeIBProvider и вперед. WBR, Alexey ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 19:00 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
2Алексей Ковязин Спасибо но, разные варианты были рассмотрены и было выбрано написание на С++ на IB API. Так что тут ничего не изменишь. 2All Собственно, продолжает интересовать вопрос: как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 20:23 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
WIN1251 - это здорово, но не тогда, когда в базе лежат данные на нескольких языках сразу, причем в одних и тех же таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 20:40 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Собственно, насчет работы с 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 21:20 |
|
||
|
Длина UNICODE_FSS
|
|||
|---|---|---|---|
|
#18+
Спасибо, Elias, видимо, тоже самое надо будет делать при написании UDF. Чтобы моя функция разбирала юникодную строку, мне надо будет конвертить ее, например, в двухбайтный char. Джавный же клиент, если пользоваться JayBirdом, кажется работает корректно, как показал мой опыт (с тем же lc_ctype=UNICODE_FSS) К сожалению, нет времени мне засесть, когда я дойду до этого, я продолжу топик, и поделимся опытом. Ф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 18:48 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32185985&tid=1580350]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 309ms |
| total: | 550ms |

| 0 / 0 |
