[mysql] 二进制数据编辑方法

需求:按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);






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值