В БД Oracle хранятся данные в которых присутствует кириллица, CHARACTERSET CL8MSWIN1251. Забираю посредством ODBC, вместо кириллицы - знаки вопроса.
std::string kOdbcWrapper::KSQLStatement::getFieldAsString(unsigned short nsColNum)
{
SQLINTEGER nRlDataSz = 0;
const unsigned int nBufSize = 256;
char cBuff[nBufSize]={0};
std::string sRetStr;
RETCODE rc = SQLGetData(m_hldStmt->getHandle(), nsColNum,SQL_C_CHAR,cBuff,nBufSize,&nRlDataSz);
if (rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)
{
sRetStr = cBuff;
return sRetStr;
}
if (nRlDataSz>0)
{
SQLINTEGER nVecBufSz = nRlDataSz+1;
std::vector<char> vBuff(nVecBufSz, 0);
rc = SQLGetData(m_hldStmt->getHandle(), nsColNum, SQL_C_CHAR,
reinterpret_cast<SQLCHAR *>(&vBuff.front()), nVecBufSz, &nRlDataSz);
if (rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)
return std::string(&vBuff[0], vBuff.size());
}
return sRetStr;
}
Проблема берёт начало из-за несоответствия кодировок клиента и сервера. Кодировки проверяются через SELECT * nls_session_parameters
и SELECT * nls_database_parameters
соответственно. Необходимо проверить наличие переменной окружения NLS_LANG
на клиенте, и в случае её отсутствия установить её. В моём случае база была в кодировке AMERICAN_AMERICA.CL8MSWIN1251
установив такую же кодировку в NLS_LANG
проблема ушла
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть таблица stuff_id с полями id и nameЕсть таблица stuff_phone с полями id, phone, preference
В локале полный дамп базы - все летаетНа хостинге висим в глушняк (504я)