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

来源:互联网 发布:java判断float整数 编辑:程序博客网 时间:2024/05/16 11:50

需求:按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()BEGINDECLARE __AttachContent VARCHAR(2048)  CHARACTER SET 'latin1' DEFAULT '';--                                            byType  byIdx   wDataLen          iData1              iData2SET __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);






原创粉丝点击