Запуск SQL*Plus с bash приводит к неправильной кодировке

У меня проблема с запуском SQL*Plus в bash. Вот мой код

#!/bin/bash

#curl http://192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql > script.sql
wget -O script.sql 192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql
set NLS_LANG=_.UTF8
sqlplus /nolog << ENDL
connect login/password 
set sqlblanklines on
start script.sql
exit
<<endl

Я загружаю операторы вставки из нашей интрасети, помещаю их в файл sql и запускаю через SQL*Plus. Это работает нормально. Моя проблема в том, что когда я сохраняю файл script.sql, моя кодировка идет не так. Все специальные символы (например, символы) не работают, и это приводит к вставке неправильных символов в мою базу данных. Кодировка этого файла - UTF-8, также UTF-8 установлен на странице XSQL в нашей интрасети. Так что я действительно не знаю, где может быть проблема.

А также приветствуются любые советы относительно моего скрипта, я новичок в написании скриптов для Linux:-)

2 ответа

Решение

Хорошо, проблема была не в файле (кодировка была UTF-8, как должно быть), а в настройке переменной среды Oracle NLS_LANG. Таким образом, решение было поставить эту строку перед выполнением сценария SQL*Plus

NLS_LANG="CZECH_CZECH REPUBLIC.UTF8" export NLS_LANG

Возможно, вам придется преобразовать ваши вставки в кодовую страницу ISO8859. Проверьте кодировку, используемую на вашем сервере Oracle. Кодировка должна выглядеть как "WE8ISO8859P1" или что-то в этом роде, что сообщит используемую кодовую страницу ISO.

Вы можете использовать iconv или что-то подобное, чтобы преобразовать ваш файл из кодировки UTF-8 в кодировку ISO8859, а затем попробуйте запустить его через SQL*Plus.

Другие вопросы по тегам