需求:按C++格式保存如下结构到mysql blob 字段
typedef struct _MailSubAttachHead
{
BYTE byType;
BYTE byIdx;
WORD wDataLen;
INT iData1;
INT iData2;
}TMailSubAttachHead;
MYSQL 中的存储过程处理(注意变量定义要指定为CHARACTER SET 'latin1',否则会出现错误:DB默认是utf8)
ERROR 1366 (HY000): Incorrect string value: '\xE8\x03\x00\x00' for column '__AttachContent' at row 1
DROP FUNCTION IF EXISTS clr_int2byte;
DELIMITER $$
create function clr_int2byte(_data int unsigned )
returns binary(4)
begin
return concat(char(_data & 0x000000FF),
char(_data>>8 & 0x000000FF),
char(_data>>16& 0x000000FF),
char(_data>>24& 0x000000FF));
end$$
DELIMITER ;
DROP FUNCTION IF EXISTS clr_word2byte;
DELIMITER $$
create function clr_word2byte(_data SMALLINT unsigned )
returns binary(2)
begin
return concat(char(_data & 0x00FF),
char(_data>>8 & 0x00FF));
end$$
DELIMITER ;
DROP PROCEDURE IF EXISTS Prws_Game_CreateMail;
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE test()
BEGIN
DECLARE __AttachContent VARCHAR(2048) CHARACTER SET 'latin1' DEFAULT '';
-- byType byIdx wDataLen iData1 iData2
SET __AttachContent = CONCAT(__AttachContent, CHAR(1),CHAR(0),clr_word2byte(8), clr_int2byte(100) , clr_int2byte(200) );
SET __AttachContent = CONCAT(__AttachContent, CHAR(1),CHAR(1),clr_word2byte(8), clr_int2byte(1100), clr_int2byte(2200));
END;
$$
DELIMITER ;
call Prws_test (1000);