Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过ODBC写入MySQL表的二进制数据被截断_C++_Mysql_Odbc - Fatal编程技术网

C++ 通过ODBC写入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

我有一个MySQL数据库,其中一个表包含一个
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
或其他);如果它是一个宏,您首先需要将它指定给引用的某个变量。