| Bug #96201 | fetch data wrong under windows when table has longtext column | ||
|---|---|---|---|
| Submitted: | 14 Jul 2019 9:30 | Modified: | 12 Dec 2019 10:19 |
| Reporter: | fnzh fnzh | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | Connector / ODBC | Severity: | S3 (Non-critical) |
| Version: | 8.0.16 | OS: | Windows |
| Assigned to: | CPU Architecture: | x86 | |
[14 Jul 2019 9:30]
fnzh fnzh
[15 Jul 2019 12:50]
MySQL Verification Team
Thank you for the bug report. Could you please provide a complete test case sql script for table and code file which hit the issue reported. Thanks.
[16 Jul 2019 14:47]
fnzh fnzh
The mysql server version is 8.0.16 too. table sql:
CREATE TABLE `ut_User1_Account_PrpTab` (
`_id` int(11) NOT NULL,
`_key` int(11) NOT NULL,
`PrpTab` longtext,
UNIQUE KEY `_id_key` (`_id`,`_key`),
KEY `_id` (`_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
code:
int main()
{
SQLHENV henv;
SQLHDBC hdbc;
HSTMT hstmt;
SQLRETURN sqlRet = ::SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
assert(sqlRet != SQL_ERROR);
sqlRet = ::SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
assert(sqlRet != SQL_ERROR);
sqlRet = ::SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
assert(sqlRet != SQL_ERROR);
char strConnectOut[1024];
SQLSMALLINT strConnectSize;
const char* pConnectStr = "FILEDSN=../config/filedsn/mysql_fds_test1.dsn;UID=dbuser;PWD=1234";
sqlRet = ::SQLDriverConnect(hdbc, NULL, (SQLCHAR*)pConnectStr, (SQLSMALLINT)::strlen(pConnectStr),
(SQLCHAR*)strConnectOut, sizeof(strConnectOut), &strConnectSize, SQL_DRIVER_NOPROMPT);
assert(sqlRet != SQL_ERROR);
::printf("connected\n");
sqlRet = ::SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
assert(sqlRet != SQL_ERROR);
const char* pSqlSelect = "SELECT _key, PrpTab FROM ut_User1_Account_PrpTab WHERE _id = ?;";
sqlRet = ::SQLPrepare(hstmt, (SQLCHAR*)pSqlSelect, (int)::strlen(pSqlSelect));
assert(sqlRet != SQL_ERROR);
sqlRet = ::SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
assert(sqlRet != SQL_ERROR);
int id = 10001;
sqlRet = ::SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 10, 0, (SQLPOINTER)&id, 0, nullptr);
assert(sqlRet != SQL_ERROR);
sqlRet = ::SQLExecute(hstmt);
assert(sqlRet != SQL_ERROR);
sqlRet = ::SQLFreeStmt(hstmt, SQL_UNBIND);
assert(sqlRet != SQL_ERROR);
int key = -1;
SQLLEN retLen1;
sqlRet = ::SQLBindCol(hstmt, 1, SQL_C_SLONG, (SQLPOINTER)&key, sizeof(key), &retLen1);
assert(sqlRet != SQL_ERROR);
sqlRet = ::SQLFetch(hstmt);
assert(sqlRet != SQL_ERROR);
if (sqlRet != SQL_NO_DATA)
{
char longTextBuf[4096];
SQLLEN retLen2;
sqlRet = ::SQLGetData(hstmt, 2, SQL_C_CHAR, longTextBuf, sizeof(longTextBuf), &retLen2);
::printf("key=%i, text=%s", key, longTextBuf);
}
char ret;
::scanf("%c", &ret);
return 0;
}
These code connect sqlserver, can work normally, however connect mysql server, the int column return zero always, whatever data source running in windows or linux.
[12 Dec 2019 10:19]
MySQL Verification Team
Hello fz fnzh, Thank you for the bug report. IMHO this is duplicate of bug #97191. Please see the bug #97191. Regards, Ashwini Patil
