blob непонятная кодировка.

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
Закрыто
imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

blob непонятная кодировка.

Сообщение imobile » Чт 26 июл 2012 13:38

Здравствуйте.
Есть таблица, в ней 2 столбца varchar255
Мне не хватило размера второго поля и я сделал с помощью dbforge blob
Получилось

Код: Выделить всё

CREATE TABLE u_db.import(
  IP_ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  IP_NAME VARCHAR(255) NOT NULL,
  IP_VALUE BLOB DEFAULT NULL,
  PRIMARY KEY (IP_ID),
  UNIQUE INDEX IP_NAME (IP_NAME)
)
ENGINE = INNODB
AUTO_INCREMENT = 5
AVG_ROW_LENGTH = 4096
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = 'параметры импорта';
Сохраняю данные через AnsiString например "<SГруппыS><MГруппыM><QГруппыQ><RГруппыR><P2Группы2P>"
Дальше пытаюсь загрузить обратно в строку.

Код: Выделить всё

AnsiString sd=MyQuery1->FieldByName("IP_VALUE")->AsString
Вылезает абракадабра. Хотя в dbforge нормально читается. В параметрах соединения unicode=true В чем может быть дело? или blob поля читаются иначе?

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: blob непонятная кодировка.

Сообщение AndreyZ » Пт 27 июл 2012 12:38

Здравствуйте,

Опция UseUnicode не влияет на чтение данных из BLOB полей, они всегда читаются в ansi формате. Это вызвано тем фактом что BLOB поля содержат бинарные данные, которые нет смысла конвертировать в utf формат. dbForge Studio for MySQL конвертирует данные BLOB полей в кодировку utf8 которая используется dbForge Studio for MySQL по умолчанию. Поэтому, если Вы вставили данные в BLOB поле в dbForge Studio for MySQL используя кодировку utf8, то для корректного чтения таких данных в MyDAC Вам необходимо конвертировать данные из uft формата в ansi. Например:

Код: Выделить всё

AnsiString ts = UTF8Decode(MyQuery1->FieldByName("IP_VALUE")->AsAnsiString);
Другое решение, использовать для работы с utf строковыми данными один из следующих MySQL типов: TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT. При работе с данными типами MyDAC учитывает кодировку данных (Charset, UseUnicode). Более подробную информацию о различиях BLOB и TEXT типов Вы можете найти по следующей ссылке: http://dev.mysql.com/doc/refman/5.0/en/blob.html

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: blob непонятная кодировка.

Сообщение imobile » Пн 30 июл 2012 06:25

Спасибо большое.
Text помог.

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: blob непонятная кодировка.

Сообщение AndreyZ » Пн 30 июл 2012 06:48

Пожалуйста. Обращайтесь к нам если возникнут дальнейшие вопросы по MyDAC.

skr
Сообщения: 3
Зарегистрирован: Вт 26 мар 2013 19:53

Re: blob непонятная кодировка.

Сообщение skr » Вт 26 мар 2013 19:59

в Delphi 7 в запросе на локальном компьютере заместо полей с типом TEXT возвращает (MEMO),что делать
S:='SELECT * FROM table1';
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add(S);
MyQuery1.Open;
MyQuery1.First;
count:=MyQuery1.RecordCount;
While Not MyQuery1.EOF Do
Begin
StringGrid1.RowCount:= count+1;
with StringGrid1 do
begin
i:=i+1;
StringGrid1.Cells[0,i]:=UTF8Decode(MyQuery1.Fields[0].Text);
StringGrid1.Cells[1,i]:=UTF8Decode(MyQuery1.Fields[1].Text);

DemetrionQ
Devart Team
Сообщения: 51
Зарегистрирован: Пн 28 янв 2013 11:54

Re: blob непонятная кодировка.

Сообщение DemetrionQ » Пт 29 мар 2013 11:38

Здравствуйте.

Для решения проблемы используйте TField.AsString вместо TField.Text .

Закрыто