Допустим, я создал два разных исполняемых файла программы, например, на C ++.
По некоторым причинам внутреннее представление текста в двух программах отличается друг от друга.Допустим, первая программа использует текстовое представление A, а другое текстовое представление B. Это может быть определенная 8-битная кодовая страница ANSI, Unicode / UTF-8 или Unicode / UTF-16 или что-то еще.
Теперь каждыйПрограмма хочет передавать текст (добавлять / извлекать данные) в / из той же таблицы базы данных на сервере (базы данных).Каждая программа связывается с базой данных через ODBC.Таким образом, программы не знают, с какой системой баз данных они общаются.
В этом конкретном случае, хотя база данных фактически является базой данных Oracle RDMS, а администратор сервера базы данных настроил базу данных для использования UTF-8.
В системе, в которой работают программы,соответствующий драйвер ODBC доступен, чтобы программы могли подключаться через ODBC.Каждая программа будет обрабатывать и преобразовывать данные типа ODBC SQL_C_CHAR во внутреннее текстовое представление соответствующим образом.Я предполагаю, что программы не могут сделать ничего другого, кроме как предположить, что для текста SQL_C_CHAR возвращается определенная кодировка.Если нет, нужно указать программам, какая это кодировка.
Для Oracle я знаю, что переменная окружения NLS_LANG может использоваться на клиенте.Я предполагаю, что он влияет на драйвер ODBC (связанный с SQL_C_CHAR) для преобразования из определенной кодировки (как задано NLS_LANG) во внутреннюю кодировку базы данных (в этом примере UTF-8) и наоборот.
Если машина, на которой запущены мои программы, имеет NLS_LANG, этот параметр повлияет на последовательности байтов, возвращаемых для SQL_C_CHAR, поэтому мои программы не могут внезапно принять определенную кодировку для текста, возвращаемого через SQL_C_CHAR.
Этоможно настроить соединение ODBC (желательно программно во время выполнения), чтобы оно надлежащим образом заботилось о преобразованиях текста для двух программ, то есть из / в представление в / из UTF-8 и из / в представление B в / из UTF-8?
С уважением, / Майкл
PS.Поскольку программы соединяются через ODBC, я не думаю, что было бы хорошо, чтобы они теперь что-то говорили о NLS_LANG, поскольку это специфическая переменная среды Orcacle.