У меня есть пример программы ниже
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)
, Я буду предоставлять.
Вы установили для переменной NLS_LANG значение ALL32UTF8. Также есть способ сделать это на уровне OCI, см. OCIEnvNlsCreate и Руководство по поддержке глобализации баз данных.
Делая это, вы сообщаете драйверу OCI, что все, что вы храните в буферах, находится в кодировке UTF8, и все, что извлечено из базы данных, также должно быть в UTF8.
PS: обратите внимание, что некоторые функции API OCI различают количество байтов и количество символов. Так, например, вы не должны использовать OCILobRead / OCILobWrite для манипулирования CLOBS. Вы должны использовать расширенные версии OCILobRead2 / OCILobWrite2.
Других решений пока нет …