Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Проблема с BLOB-полем (Pest) 23/04/2009 - 17:30:56
      Re: Проблема с BLOB-полем (Pest) 27/04/2009 - 09:41:15

> Original message text:
> From: Pest - 23/04/2009 - 17:30:56
> Subject:Проблема с BLOB-полем
> -----------------
> Проблема с BLOB-полем
>
>
> среда - [CodeGear™ Delphi® 2007 for Win32®]
> сервер БД - [MySQL 5.0]
> компонент -[ZeosBD]
>
>
>
>
> fs:=TFileStream.Create(fn,fmOpenRead);
> // читаем некие параметры из fs...
>
> msNeuro := TMemoryStream.Create;
> msNeuro.Position := 0;
>
> col := NeuroSz * sizeof(smallint); // NeuroSz - ожидаемое число записей размером в SmallInt
> msNeuro.CopyFrom(fs, col); // fs-TFileStream, Position стоит на верном месте.
>
> msNeuro.SaveToFile(ExtractFilePath(Application.ExeName) + '.tmp_write'); // проверка считанного!
> // msNeuro - действительно содержит 300 * 2 байт, совпадающие с считанным содержимым fs
>
> // а теперь BLOB запишем
> DataSet.SQL.Clear;
> DataSet.SQL.Add('select * from `events` where Id_event=(select MAX(Id_event) from `events`)');
> DataSet.Open;
> // ссылаемся на последнюю запись в таблице `events`
> if not (DataSet.State in [dsInsert, dsEdit]) then DataSet.Edit;
> try
> TBlobField(DataSet.FieldByName('NeuroBlob')).LoadFromStream(msNeuro); // Собственно загузка msNeuro в BLOB -поле
> finally
> msNeuro.Free;
> end;
> Dataset.Post;
>
>
>
> BLOB заполняется!
> НО если записывали 600 байт, то при чтении BLOB я вижу 768 байт!
> читаю и через чтение BLOB msNeuro и через вьювер (mySQL-Front)
> При чем первые 4 байта совпадают с оригиналом, а остальное отличчается... иногда есть совпадения... но не чаще 50%
>


From: Pest - 27/04/2009 - 09:41:15
Subject:Проблема с BLOB-полем
-----------------
ZEOSDBO-6.6.4-stable - стоит самый новый.

итак немного разбора дампа того что пишется

00 00 4F 00 FE 03 3C 03 FB FF - отправлено
00 00 4F 00 D1 8E 03 3C 03 D1 8B D1 8F - сохранено в базе

то есть
FB - сохранено как D1 8B
FF - сохранено как D1 8F

как будто некие "нераспознанные символы" БД сохраняет в UNICODE
отсюда и разница размеров, сохраняется больше информации чем должно, ввиду замен

РЕШЕНИЕ ПРОБЛЕМЫ!
меняем кодировку на "убоднопонимаемаю" в данной ОС - cp1251

ALTER DATABASE `medical` DEFAULT CHARACTER SET cp1251;


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
35490



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |