C++ 通过ODBC写入MySQL表的二进制数据被截断
我有一个MySQL数据库,其中一个表包含一个C++ 通过ODBC写入MySQL表的二进制数据被截断,c++,mysql,odbc,C++,Mysql,Odbc,我有一个MySQL数据库,其中一个表包含一个BINARY(16)列 当我通过ODBC从我的C++应用程序写入二进制数据时,数据被处理为一个空终止字符串,即在数据中的第一个空字节截断。 >在我的C++应用程序中,我使用 SqLbBurnDistabor >代码>绑定未签名的char(16)< /代码>数组: SQLBindParameter(statementHandler, paramCount, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, MAX_N
BINARY(16)
列
当我通过ODBC从我的C++应用程序写入二进制数据时,数据被处理为一个空终止字符串,即在数据中的第一个空字节截断。 <> >在我的C++应用程序中,我使用<代码> SqLbBurnDistabor >代码>绑定<代码>未签名的char(16)< /代码>数组:
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\u NOTIFICATION\u OUT\u IP\u BIN\u LEN
为16
如何确保16个字节写入数据库,即使二进制数据包含空值?来自:
如果StrLen\u或IndPtr是空指针,则驱动程序假定所有输入参数值都是非空的,并且字符和二进制数据以空结尾
相反,将该参数设置为指向数据长度的指针:
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
);
Obv,这假设
MAX\u NOTIFICATION\u OUT\u IP\u BIN\u LEN
是int
(const
或其他);如果它是一个宏,您首先需要将它指定给引用的某个变量。