SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.07.2011 10:46:19

Kerim
Участник
Зарегистрирован: 23.03.2011
Сообщений: 2

Чтение значений из BLOB

Приветствую. Проблема следующая. Мне в хранимой процедуре нужно определить размер графического файла формата tga. Он хранится в 13-14 и 15-16 байтах с начала файла (если начинать с 1).

Сначала делаю "в лоб":

...
DECLARE FileName VARCHAR(100);
DECLARE FileImage LONGBLOB;
DECLARE Width TINYINT UNSIGNED;

...
SET FileName = ...
SET FileImage = LOAD_FILE(FileName);
SET Width = SUBSTR(FileImage,13,2);

Получаю:

Procedure execution failed
1366 - Incorrect integer value: '\x80\x0D' for column 'Width' at row 1

определяю Width так:
DECLARE Width VARCHAR(20);
чтобы посмотреть, что же мне возвращается на самом деле... результат тот же:

Procedure execution failed
1366 - Incorrect string value: '\x80\x0D' for column 'Width' at row 1

начинаю шаманить:

SET Width = REPLACE(SUBSTR(FileImage,13,2),'\x','');
или
SET Width = REPLACE(SUBSTR(FileImage,13,2),'\\x','');
,если ему один слэш не нравится

дает аналогичный результат:

Procedure execution failed
1366 - Incorrect string value: '\x80\x0D' for column 'Width' at row 1

Есть идеи, коллеги? php не предлагать, задачу нужно решить силами MySQL.

Неактивен

 

#2 07.07.2011 19:51:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Чтение значений из BLOB

Вы пытаетесь забить гвозди микроскопом sad
Разбейте на отдельные символы и используйте ASCII() над ними.

Неактивен

 

#3 09.07.2011 13:19:00

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Чтение значений из BLOB

все правильно, надо делать как paulus сказал

DROP PROCEDURE `test` ;

DELIMITER //

CREATE PROCEDURE `test` (OUT paraml INTEGER UNSIGNED)
BEGIN
  DECLARE FileName VARCHAR (100) ;
 
  DECLARE FileImage LONGBLOB ;
 
  SET FileImage = LOAD_FILE("D:\imgTest.tga") ;
 
  SET paraml = ASCII(SUBSTRING(FileImage,13, 1))+ASCII(SUBSTRING(FileImage,14, 1))*256 ;
 
END //

CALL test(@a);
SELECT @a;

Отредактированно DJK (09.07.2011 13:19:43)

Неактивен

 

#4 21.07.2011 12:04:54

Kerim
Участник
Зарегистрирован: 23.03.2011
Сообщений: 2

Re: Чтение значений из BLOB

Спасибо. Только про микроскоп и гвозди как-то не к месту, мне кажется smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson