powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как писать widestring в firebird в D5?
66 сообщений из 66, показаны все 3 страниц
как писать widestring в firebird в D5?
    #38845124
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, с наступающим!

firebird 2, Delphi 5

создал в табличке поле: aaaa varchar(250) CHARACTER SET UNICODE_FSS

и через stream+параметр записываю в него widestring.

потом хочу его прочитать:

bsz := IBQueryW.FieldByName('aaaa').DataSize;
setlength(bu,bsz);
IBQueryW.FieldByName('aaaa').GetData(bu);
ws := buff2ws(@bu);

а DataSize мне всегда возвращает 251. :) хотя в буфере вижу свой widestring. что я не так делаю?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845129
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну ладно, допустим, до нуля прочитаю, остальное проигнорирую.

а вот попытался искать по нему:

IBQ.SQL.Add('select * from zzzz where aaaa = :xxx');
IBQ.Params.Clear;
IBQ.Params.CreateParam(ftWideString,'xxx',ptInput);
IBQ.Params[0].Value := mywidestring;
IBQ.Prepare;
IBQ.Open;

получаю: exception class EIBClientError with message 'unsupported feature'

как победить?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845158
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UNICODE_FSS - это не widestring.
Отсюда гениальная идея: нужно сконвертировать widestring в UNICODE_FSS и затем уже скармливать полученную строку TIBQuery самым обычным способом.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845162
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpertUNICODE_FSS - это не widestring.
Отсюда гениальная идея: нужно сконвертировать widestring в UNICODE_FSS и затем уже скармливать полученную строку TIBQuery самым обычным способом.

А где списать?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845165
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хоть бы намек какой, во что конвертить?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845218
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoхоть бы намек какой, во что конвертить?

В UNICODE_FSS, который есть не что иное, как ущербная версия UTF8.
А поскольку в FB 2 есть нормальный UTF8, то про UNICODE_FSS нужно забыть и использовать UTF8.
И, соответственно, конвертировать widestring в UTF8.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845232
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoсоздал в табличке поле: aaaa varchar(250) CHARACTER SET UNICODE_FSS

да что ж такое... ну какой еще unicode_fss!

http://www.ibase.ru/unicode_faq.htm

и с Delphi 5 вам практически не светит. если только вы не ошиблись, и у вас XE5.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845233
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

извиняюсь, ошибся, одну букву не дописал
http://www.ibase.ru/unicode_faq.html
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845237
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvи с Delphi 5 вам практически не светит.

Всё там светит и теоретически, и практически.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845261
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertВсё там светит и теоретически, и практически.
только это будет весьма геморройно. прозрачно с юникодом работает Delphi 2009 и выше.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845392
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, теперь стало понятнее... но не совсем. :) И вот, что именно не понятно:

Есть тип WideString, существует TFieldType равный ftWideString. Логично предположить, что ftWideString как раз для WideString. А в базе при этом что, UTF8?... не стыкуется как-то... :) или для ftWideString надо в таблице создавать поле какого-то другого типа?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845430
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoсуществует TFieldType равный ftWideString. Логично предположить, что
ftWideString как раз для WideString
Вот только это предположение разбивается о реальность того, что ftWideString не
используется ни одним набором компонент доступа к данным и у TField нет свойства,
позволяющего скормить ему собственно WideString.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845433
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino,

в базе UTF8, если в коннекте UTF8, то IBX и другие компоненты доступа должны сами преобразовывать UTF8 в строку нужного типа.

Вот я смотрю в IBX от Delphi 2007, которая не юникодная. И вижу, что там в
IBCustomDataSet.pas в DefaulFieldClasses элементам ftWideString, ftFixedWideChar, ftWideMemo и проч сопоставлен nil. Таким образом, с сервера такой тип столбца не получить.
Если выставить его прямо в IBX, на клиенте, то получится пшик. Потому что такой тип никак не обрабатывается.

В юникодных Дельфи, в IBX, для ftWideString есть соответствие, это TIBStringField (который унаследован от TWideStringField), который используется для любых строк.

В общем, вы же указанный мной FAQ не прочитали, а там написано, что компоненты доступа к БД должны поддерживать юникод. И дальше все, чем вы работаете с этими данными, тоже должно поддерживать юникод (как минимум грид, поля ввода, и прочее).
В до-юникодных Дельфи есть компоненты, поддерживающие юникод, но они все сторонние (типа TMS, и т.п.).
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845479
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoСпасибо, теперь стало понятнее... но не совсем. :) И вот, что именно не понятно:

Есть тип WideString, существует TFieldType равный ftWideString. Логично предположить, что ftWideString как раз для WideString. А в базе при этом что, UTF8?... не стыкуется как-то... :) или для ftWideString надо в таблице создавать поле какого-то другого типа?

Юникод в FB (UTF8) и юникод в винде (UTF16) - это две большие разницы. UTF8 прекрасно себе живет в ftString.
От сервера ты получаешь строки в UTF8, конвертируешь их в widestring, затем уже с широкими строками делаешь то, что тебе нужно.
И наоборот.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845488
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На компонентах, вроде, StringGrid, DBGrid и прочих, все прекрасно отрисовывается при помощи Windows.TextOutW. Редактировать можно в TRichEdit, если не полениться отпарсить rtf, чтобы получить обратно свой widestring. И в blob полях все нормально сохранется, и вынимается оттуда. Осталось научиться искать.

ftWideString для какого типа данных был сделан?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845500
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert ,

переменной utf8 у меня нет, я могу просто конвертануть widestring в array of byte. после этого IQuery.Params.CreateParam с каким типом создавать, чтобы через LoadFromStream его залить?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845504
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino,

интересно, зачем это все надо, если в D2009 и выше работа с юникодом не требует ни доп. компонент, ни одной дополнительной строки кода?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845512
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зачем ездить на старом велосипеде, когда можно купить новый, с мотором? :) не знаю.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845552
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino IBExpert ,

переменной utf8 у меня нет, я могу просто конвертануть widestring в array of byte. после этого IQuery.Params.CreateParam с каким типом создавать, чтобы через LoadFromStream его залить?

Ты эта... ознакомиться бы с самими кодировками - как да что. Сразу полегчает.
Для utf8 не нужны переменные особых типов, utf8 прекрасно живет в ansistring. Посему AsString для работы с ней вполне достаточно.
Для конвертации UTF8 в widestring нужны соответствующие функции. Их есть, например, здесь:
http://www.yunqa.de/delphi/doku.php/products/tntunicodecontrols/index
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845556
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvbooratino,
интересно, зачем это все надо, если в D2009 и выше работа с юникодом не требует ни доп. компонент, ни одной дополнительной строки кода?

А чо стоит это щастье? Можно не отвечать :)
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845577
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertА чо стоит это щастье? Можно не отвечать
минимально оно стоит $569, это если обновиться до Delphi XE7 Prof, при этом получая все предыдущие версии (кроме 2006) до 7.
Просто если человек мастрячит новый проект на Д5, с юникодом, то это мазохизм, однозначно. Д5 сколько лет? Какие для нее есть компоненты с поддержкой юникода?
Ну да, древние TNT, еще что-то.

booratinoзачем ездить на старом велосипеде, когда можно купить новый, с мотором? :) не знаю.
я не уговариваю купить. я предлагаю оценить разницу в количестве усилий для реализации одной и той же задачи. На Дельфи 5 это N, а на Delphi 2009-XE7 - ноль.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845594
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 29 декабря 2014 г. 14:02:22:

Kdv> я предлагаю оценить разницу в количестве усилий для реализации одной и
> той же задачи. На Дельфи 5 это N, а на Delphi 2009-XE7 - ноль.
теоретический маркетинг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845610
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийтеоретический маркетинг.
ничего теоретического не вижу.
человеку надо юникод записать в базу, и считать его. Вот как он со строками обычными работал в Д5, так же прозрачно будет и в ХЕ7 работать, даже не думая, что это юникод.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845621
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 29 декабря 2014 г. 14:22:45:

Kdv> ничего теоретического не вижу.
> человеку надо юникод записать в базу, и считать его. Вот как он со
> строками обычными работал в Д5, так же прозрачно будет и в ХЕ7 работать,
> даже не думая, что это юникод. теоретически, ога.
если он пишет задачу с нуля.
и освоил нововведения всей линейки версий от D6 до ХЕ7.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845633
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Unified Interbase заявлена поддержка delphi 5, возможно через TNT

Правда, чутьё подсказывает, что в реaльности эту поддержку никто уже лет 5 не проверял.
Но это не фатально, я когда писал на пятёрке поддерживал совместимость JediVCL с D5 и это вполне реально было.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845641
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvминимально оно стоит $569, это если обновиться до Delphi XE7 Prof

Легальная Delphi 5 1999 года розлива? Бывает и такое конечно: у крупных контор, которые решили легализоваться. Какая-то, например, складская учётка на А... коробочная например. Но в настолько крупных проектах, мне кажетсЯ, вопросом закупки озаботятся более опытные лица.

Кроме того, к вышеозвученной сумме надо бы ещё добавить цену апгрейда с "пятёрки" до XE2, по крайней мере судя по
kdvDelphi XE7 Professional Upgrade from XE2-XE6 ESD (без Mobile Add-On Pack) 30200 руб

В общем, если легально топикстартера апгрейдить - то на CodeTyphon. А если нелегально, то сам найдёт
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845948
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийи освоил нововведения всей линейки версий от D6 до ХЕ7.
нафига эти нововведения все осваивать? Он про IBX пишет. С IBX и штатными контролами код приложения будет один в один, что на D5, что на XE7.

AriochЛегальная Delphi 5 1999 года розлива?
где логика? Если у него Д5 нелегальная, то к чему тут тогда разглагольствования о стоимости, хоть Д5, хоть ХЕ7? :-)
кстати, Д5 Энтерпрайз вполне много народу покупало. И до сих пор сидят на ней именно те, кто покупал.

Ariochк вышеозвученной сумме надо бы ещё добавить цену апгрейда с "пятёрки" до XE2, по крайней мере судя по
Выкинь эту мысль из головы, она неправильная.

- XE2 - минимальная версия, с которой доступен апгрейд. С 1 января 2015 это будет XE3.
- делать апгрейд до ХЕ2 невозможно, потому что "см. выше" - минимальная версия для апгрейда - ХЕ2
- до 31 декабря 2014 года была пару месяцев "амнистия" для апгрейда С ЛЮБОЙ предыдущей версии.
- в здравом уме делать апгрейд на ХЕ3-XE6 невозможно. Потому что апгрейд на ХЕ7 стоит столько же. Еще и дает возможность получить все предыдущие пропущенные версии.

не надо усложнять, все намного проще. Апгрейд с Д5 до ХЕ7 Проф до 31 декабря был $569, как я уже привел. Никаких "промежуточных" ходов для апгрейда нет и не было (и не будет).
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846099
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert Для utf8 не нужны переменные особых типов, utf8 прекрасно живет в ansistring. Посему AsString для работы с ней вполне достаточно.

ок. сегодня - завтра проверю. BOM нужен?

IBExpert Для конвертации UTF8 в widestring нужны соответствующие функции. Их есть, например, здесь:

спасибо. :) такие простые вещи пишутся минут за 10.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846152
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Млин, не верю своим глазам. неужели ищет и находит?!!..... ух, IBExpert , тебе, дорогой, особых пожеланий в новом году! :)

D5 рулит! я в этом не сомневался.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846968
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не все так гладко.

пишу в базу 3 буквы в utf8: 230,152,142, 227,129,139, 227,130,138

получаю обратно: 230,0,142, 227,129,139, 227,130,138

что это за магический символ 152? :)

видимо, ftString, все же, не подходит.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846972
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если все то же самое, и теми же средствами писать в blob, то все нормально обратно возвращается. что такое 152?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846973
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino> что такое 152?
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1134380&msg=17052595

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846981
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не совсем ясна эта таблица.

я записываю 1 символ 明, закодированный utf8: $e6, $98, $8e. обратно он прочитывается как $e6, 0, $8e.

И это точно до всяких конверторов. Записываю через TIBQuery с параметром, заполненным loadfromstream, вижу $98. Читаю TField.GetData - уже 0. Т.е. либо при записи $98 становится нулем, либо при чтении. А так, вообще, кучу текста туда заливаю - нормально. Что это может быть?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846982
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino> я записываю 1 символ, закодированный utf8: $e6, $98, $8e. обратно он прочитывается как $e6, 0, $8e.
> И это точно до всяких конверторов. Записываю через TIBQuery с параметром, заполненным loadfromstream, вижу $98. Читаю TField.GetData - уже 0. Т.е. либо при записи $98 становится нулем, либо при
> чтении. А так, вообще, кучу текста туда заливаю - нормально. Что это может быть?
Ну так посмотри в IBExpert'е чтоль, что туда записывается для начала, потом и дальше думать будешь...

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38846986
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoЗаписываю через TIBQuery с параметром, заполненным loadfromstream, вижу $98. Читаю TField.GetData - уже 0.

Ты извращенец что-ли? Для дельфи и TIBQuery строка utf8 ничем абсолютно не отличается от строки win1251, например.
Читай и пиши строковые поля через AsString.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847072
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

у нас в legacy-коде были записи срок через stirngstream, правда это относилось к параметрам в запросах и спросить уже не у кого почему.

в XE2 - и после установки типов TParam в фиксированное значение руками - это стало ненужно. Но раньбше почему-то использовалось. Хотя "на бумаге" и не должно бы быть разницы
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847073
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino,

у тебя connection в какой кодировке делается?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847077
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
           Q.ParamByName('ID').AsInteger := id;
//         Q.ParamByName('NOTES').AsString := Notes.NewValue;  //-- BLOB Param As_XXXX_String fails with Firebird 2.1 and db-express v.4
//         Q.ParamByName('NOTES').AsBlob := TEncoding.Ansi.GetBytes( Notes.NewValue );
           Q.ParamByName('NOTES').AsMemo := Notes.NewValue;  //-- BLOB Param As_XXXX_String fails with Firebird 2.1 and db-express v.4



Вот, кстати. реальный кусок, правда на dbExpress и "юникодной" дельфе (т.е. .SetAsString выставляет параметру тип ftWideString, а не ftString).
Причём на FB 2.5.2 работало без выкрутасов, а вот в 2.1.x отказалось.
Правда при ВЫПОЛНЕНИИ запроса, когда DBX не мог найти правильный тип для параметра.

На мой взгляд, если глюк воспроихводится так легко, как запись и чтение параметра без обращения к реальному серверу (без prepare запроса например), то надо в лоб ставить Use Debug DCU и трассироваь внутренности IBX и VCL
А перед этим проверить что поставленны все официальные обновления на IBX и VCL. И возможно ещё и какие-нибудь старые VCLfixPack поискать

Либо же все же рискнуть UIB'ом
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847198
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zirraНу так посмотри в IBExpert'е чтоль, что туда записывается для начала, потом и дальше думать будешь...
да, похоже, что при записи. IBExpert показывает 1 байт в этом поле.

IBExpertТы извращенец что-ли?
со стажем! ладно, сделал запись просто через string, результат тот же: 230,152,142 записывается как 230,0,142.

Ariochу тебя connection в какой кодировке делается?
- firebird 2.1.
- база создана в WIN1251.
- потом добавлено 1 поле: alter table zzz add aaa varchar(250) CHARACTER SET UTF8
- подключаюсь в базе lc_ctype=WIN1251
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847200
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino- подключаюсь в базе lc_ctype=WIN1251И что ж вы после этого хотите?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847228
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino- подключаюсь в базе lc_ctype=WIN1251
То есть ты серверу говоришь "щаз я тебе буду пихать данные в кодировке WIN1251", а сам
пихаешь ему UTF-8. Врать нехорошо и чревато боком. Что ты и поимел.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847278
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТо есть ты серверу говоришь "щаз я тебе буду пихать данные в кодировке WIN1251", а сам
пихаешь ему UTF-8. Врать нехорошо и чревато боком. Что ты и поимел.


а наоборот врать можно? подключиться, типа, utf8, а пихать WIN1251? у меня, ведь, все остальное в WIN1251....
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847294
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoа наоборот врать можно? подключиться, типа, utf8, а пихать WIN1251?

На таком вранье сервер тебя подловит быстрее и сразу даст по соплям. Он жосткий.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847344
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovНа таком вранье сервер тебя подловит быстрее и сразу даст по соплям. Он жосткий.


хорошо... а как же тогда народ делает? вот таблица, все поля 1251, одно поле utf8. как с такими данными работать одновременно?




Всех с Новым годом!
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847349
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так никто в своём уме не делает. Есть чарсет коннекта, и данные на сервер надо передавать именно в этом чарсете.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847368
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грустно. А зачем тогда разработчик субд предусмотрел возможность заведения в одной таблице полей с разными чарсетами?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847372
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не, засада в чем-то другом. поставил firebird 2.5,
пересоздал базу в utf8, конекчусь к ней в utf8.
все равно 明かり превращается в 怎かり
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847389
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoхорошо... а как же тогда народ делает? вот таблица, все поля 1251, одно поле utf8. как с такими данными работать одновременно?


Если работаешь с utf8, зачем нужны поля в 1251??
Можно понять необходимость иметь поля в разных кодировках в доюникодные времена, а сейчас зачем?

booratinoпересоздал базу в utf8, конекчусь к ней в utf8.
все равно 明かり превращается в 怎かり


Экспертом эта строка без мутаций вставляется? Я у себя проверил - без проблем.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847392
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoхорошо... а как же тогда народ делает? вот таблица, все поля 1251, одно поле utf8. как с такими данными работать одновременно?


Кстати, с этим не должно быть никаких проблем, если коннектиться с чарсетом utf8. Можно хоть одновременно работать, хоть по очереди.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847427
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertbooratinoхорошо... а как же тогда народ делает? вот таблица, все поля 1251, одно поле utf8. как с такими данными работать одновременно?


Кстати, с этим не должно быть никаких проблем, если коннектиться с чарсетом utf8. Можно хоть одновременно работать, хоть по очереди.
А если ещё есть поле с чарсетом octets?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847434
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
свои слова 03:42 беру обратно. это я по пьяни опять коннектился 1251. :) сегодня, по трезвому, с конектом utf8 сохраняется правильно.

но с разными чарсетами одновременно работать не получается. красиво отдаются данные только в кодировке коннекта. придется все держать в utf8.

всем спасибо за поддержку, дальше, скорее всего, справлюсь.

--

с Новым Годом! Всем желаю интересных проектов и щедрых заказчивов! :))
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847514
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoпридется все держать в utf8Это всего лишь однократно выгрузить метаданные в скрипт, автозаменой поправить чарсеты и вперед. Потом влить данные тем же ибпумп-ом, например. Да, не забыть, что длина чар-варчар не более 8к (а не 32к, как при вин1251).
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847715
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Ivan_PisarevskyЭто всего лишь однократно выгрузить метаданные в скрипт, автозаменой поправить чарсеты и вперед. Потом влить данные тем же ибпумп-ом, например. [/quot]

я так не умею. написал быстренько экспорт в txt (utf-8), и таким же образом залил обратно. :)

не, ну мне, все же, не понятно. я был в полной уверенности, что TField.DataSize будет возвращать фактический размер данных, а он для ansi размером 250 возвращал 251, в для utf-8 размером 250 возвращает 1001. это так и должно быть?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847721
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino> не, ну мне, все же, не понятно. я был в полной уверенности, что TField.DataSize будет возвращать фактический размер данных, а он для ansi размером 250 возвращал 251, в для utf-8 размером 250
> возвращает 1001. это так и должно быть?
Я понимаю, что я пьян уже 72 часа, но это, млин, через всё перешагивает!!! 8-О

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847722
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoне, ну мне, все же, не понятно. я был в полной уверенности, что TField.DataSize будет возвращать фактический размер данных,
а он для ansi размером 250 возвращал 251, в для utf-8 размером 250 возвращает 1001. это так и должно быть?

Да, почитай в хелпе про TField.DataSize.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38847738
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertпочитай в хелпе про TField.DataSize.
А заодно и FAQ по ссылке на первой странице.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38852108
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoдля utf-8 размером 250 возвращает 1001

а вот это любопытно. 1000 или даже 1004 были бы понятны. Но 1000+1 ?

http://docwiki.appmethod.com/appmethod/1.14/libraries/en/Data.DB.TField.DataSize
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38852242
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа вот это любопытно. 1000 или даже 1004 были бы понятны. Но 1000+1 ?


Зачем нуль-терминатору четыре байта?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853009
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

1) а зачем там вообще нуль-терминатор? разе он запрещён в середине строки?
2) вообще-то нуль - это codepoint, и считать его место в байтах наверное не лучшая идея. Да, конечно, "вадидно самое короткое отображение кодепойнта в байты" и все такое, но похоже на смешивание уровней абстракции
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853414
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch, а в чем вопрос? DataSize показывает размер в байтах. На codepoint ему начхать. И ноль, как и первые 127 codepoint, кодируется одним байтом. В середине строки, думаю, он не запрещен, но внутри программы в случае перегона в PAnsiChar будут веселости
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853418
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Fr0st-brutal!
You wrote on 13 января 2015 г. 17:12:42:

Fr0st-brutal> ноль, как и первые 127 codepoint, кодируется одним байтом. В середине
> строки, думаю, он не запрещен не в utf-8
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853448
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МимопроходящийHello, Fr0st-brutal!
You wrote on 13 января 2015 г. 17:12:42:

Fr0st-brutal> ноль, как и первые 127 codepoint, кодируется одним байтом. В середине
> строки, думаю, он не запрещен не в utf-8

Ты про ноль или что-то еще? Если про ноль, то он столь же валиден, как и в ansi строке. Т.е. никакого символа не обозначает, но вполне может попадаться в случае специфических данных (какой-нибудь строковый массив в сишной манере, например).
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853625
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

> На codepoint ему начхать. И ноль, как и первые 127 codepoint, кодируется одним байтом
выбери одно. Если "начхать" - но каждую букву резервируются строго 4 байта.

а ноль-терминатор не нужен вообще.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853795
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalТы про ноль или что-то еще? Если про ноль, то он столь же валиден, как и в ansi строке.

В дельфевые ansistring можно, конечно, и нули пихать, но клиент FB про дельфевые ansistring ничего не знает.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853814
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpertFr0sT-BrutalТы про ноль или что-то еще? Если про ноль, то он столь же валиден, как и в ansi строке.

В дельфевые ansistring можно, конечно, и нули пихать, но клиент FB про дельфевые ansistring ничего не знает.
Хочешь сказать, что клиент где-то применяет тупые* сишные приемы обращения с 0-term string, игнорируя размер данных, который ему прислал сервер? Не верю, не может же быть все настолько плохо.

*Не холиварю, но asciiz - реально самый тупой и неоптимальный способ оперирования строками
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38853912
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertклиент FB про дельфевые ansistring ничего не знает.
Он и про null-terminated не в курсе, поскольку тупо оперирует блоками байт с известной длиной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
66 сообщений из 66, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как писать widestring в firebird в D5?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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