通过ODBC写入MySQL表的二进制数据被截断

时间:2012-05-11 08:36:21

标签: c++ mysql odbc

我有一个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值?

1 个答案:

答案 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
);