3

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

即使二进制数据包含 Null 值,如何确保将 16 个字节写入数据库?

4

1 回答 1

2

来自MSDN 文档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
);
于 2012-05-11T09:02:27.297 回答