我有一个MySQL数据库,其中包含一个包含BINARY(16)
列的表。
当我从C ++应用程序通过ODBC写二进制数据时,数据被视为以Null结尾的字符串,即它在数据的第一个Null字节处被截断。
在我的C ++应用程序中,我使用unsigned char [16]
绑定SQLBindParameter
数组,如下所示:
SQLBindParameter(statementHandler, paramCount, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, MAX_NOTIFICATION_OUT_IP_BIN_LEN, 0, _notificationOutDstIP, MAX_NOTIFICATION_OUT_IP_BIN_LEN, 0);
MAX_NOTIFICATION_OUT_IP_BIN_LEN
是16。
如何确保将16个字节写入数据库,即使二进制数据包含Null值?
答案 0 :(得分:2)
来自MSDN documentation for SQLBindParameter
:
如果
StrLen_or_IndPtr
是空指针,则驱动程序假定所有输入参数值都是非NULL
,并且该字符和二进制数据以空值终止。
相反,将该参数设置为指向数据长度的指针:
SQLBindParameter(statementHandler,
paramCount,
SQL_PARAM_INPUT,
SQL_C_BINARY, SQL_BINARY,
MAX_NOTIFICATION_OUT_IP_BIN_LEN,
0,
_notificationOutDstIP,
MAX_NOTIFICATION_OUT_IP_BIN_LEN,
&MAX_NOTIFICATION_OUT_IP_BIN_LEN
);