Вставка UNICODE в Oracle из C / C ++ показывает мусор в БД

У меня есть пример программы ниже

int main(void)
{
char insertQuery[] = "INSERT INTO ABCD_TABLE VALUES('987','31-AUG-16','19-JAN-17','901',
'31-DEC-12','1',\'\',\'\',\'\',\'\',\'\',\'\',\'ÜÜcreate02_de,ää\')";
connectToSQLServer();
executeINSERTQuery(insertQuery);
return 0;
}

Когда я запускаю программу, запрос успешно вставляется в БД, но ÜÜ отображается как мусор

Когда я запускаю тот же запрос вручную в Toad, вставляется proprly и ÜÜ отображается правильно в Toda,

"INSERT INTO ABCD_TABLE VALUES('987','31-AUG-16','19-JAN-17','901','31-DEC-12','1','','','','','','','ÜÜcreate02_de,ää')";

В чем может быть проблема?
Пожалуйста, дайте мне знать, если вам, ребята, нужен пример кода connectToSQLServer() а также executeINSERTQuery(insertQuery), Я буду предоставлять.

0

Решение

Вы установили для переменной NLS_LANG значение ALL32UTF8. Также есть способ сделать это на уровне OCI, см. OCIEnvNlsCreate и Руководство по поддержке глобализации баз данных.

Делая это, вы сообщаете драйверу OCI, что все, что вы храните в буферах, находится в кодировке UTF8, и все, что извлечено из базы данных, также должно быть в UTF8.

PS: обратите внимание, что некоторые функции API OCI различают количество байтов и количество символов. Так, например, вы не должны использовать OCILobRead / OCILobWrite для манипулирования CLOBS. Вы должны использовать расширенные версии OCILobRead2 / OCILobWrite2.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]