База FB 3.0 в кодировке 1251 надо записать несколько полей в юникоде

antox
Дата: 18.08.2019 10:47:44
Никак не могу разобраться, как в базу кодировке 1251 записать/прочитать национальные символы Καιρός

Может ч-з BLOB, ведь при таком раскладе БД неважно то там? Но как написать непонятно.

Пробую так:

var s: string;
begin
     s:='[b]Καιρός[/b]';

     StreamMem:=TMemoryStream.Create;

     L := length(s);
     StreamMem.WriteBuffer(L, SizeOf(L));
     StreamMem.WriteBuffer(s[1], L);

      ibDataSet1.Edit;
      (ibDataSet1.FieldByName('FBLOB') as TBlobField).LoadFromStream(StreamMem);
      ibDataSet1.Post;

     FreeAndNil(StreamMem);
end;


Потом пытаюсь получить:

     StreamMem:=TMemoryStream.Create;

      IF (ibDataSet1.FieldByName('FBLOB') as TBlobField).BlobSize>0 Then
       begin
        (ibDataSet1.FieldByName('FBLOB') as TBlobField).SaveToStream(StreamMem);
         StreamMem.Position:=0;
         StreamMem.ReadBuffer(L, SizeOf(L));
         SetLength(S, L);
         StreamMem.ReadBuffer(S[1], L);
         showmessage(s);
       end;
     FreeAndNil(StreamMem);
    end;


Поле - BLOB SUB_TYPE 0 SEGMENT SIZE 80

На выходе получаю 'Και44', неправильно считаю байты? Как получить корректно?
antox
Дата: 18.08.2019 10:49:37
в s пишу значение 'Καιρός', а то что-то скрипт вверху преобразовал
antox
Дата: 18.08.2019 10:50:52
Или можно как-то кодами писать в обычное строковое поле, а при выводе в программе преобразовывать?
sql2012
Дата: 18.08.2019 10:59:14
antox
Или можно как-то кодами писать в обычное строковое поле, а при выводе в программе преобразовывать?


? кодировать в base64?
antox
Дата: 18.08.2019 11:01:19
sql2012
antox
Или можно как-то кодами писать в обычное строковое поле, а при выводе в программе преобразовывать?


? кодировать в base64?


Имя сестра, имя )

Можно пример реализации?
YuRock
Дата: 18.08.2019 11:06:45
1. Этот вопрос - не по дельфи.
2. Кодировка базы - это всего-лишь кодировка по-умолчанию для полей, которым кодировка не указана явно.
antox
Дата: 18.08.2019 11:24:29
YuRock,

И? Как записать в БД Καιρός и прочитать из базы, если база FB 3.0 win1251 ?
Dimitry Sibiryakov
Дата: 18.08.2019 12:33:00
antox
Как записать в БД Καιρός и прочитать из базы, если база FB 3.0 win1251 ?

1. Создать поле с кодировкой UTF-8.
2. При подключении к базе указать кодировку подключения UTF-8.
3. Подготовить запрос INSERT с параметрами.
4. Соответствующему параметру присвоить значение строки в кодировке UTF-8.
5. Выполнить запрос.
6. Закоммитить транзакцию.

Всё, телемаркет.
antox
Дата: 18.08.2019 12:42:02
п.2 Никак, коннект один, все данные в 1251 и подключение соответственно тоже, делать отдельный коннект на UTF8 для нескольких полей?

Мне бы конвертировать туда/сюда, но не получается
antox
Дата: 18.08.2019 12:43:14
Через потоки и BLOB почти получилось, но почему-то не вся строка читается или пишется, не могу понять почему так получается