Linux
使用 bash 執行 SQL*Plus 會導致錯誤編碼
我在 bash 中執行 SQL*Plus 時遇到問題。這是我的程式碼
#!/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
我從我們的 Intranet 下載插入語句,將其放入 sql 文件並通過 SQL*Plus 執行它。這工作正常。我的問題是,當我保存文件 script.sql 時,我的編碼出錯了。所有特殊字元(如íášč)都被破壞,這導致在我的數據庫中插入錯誤的字元。該文件的編碼是 UTF-8,在我們內部網的 XSQL 頁面上也設置了 UTF-8。所以我真的不知道哪裡有問題。
歡迎對我的腳本提出任何建議,我是 Linux 腳本的新手:-)
好的,問題不在文件中(編碼應該是 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 執行它。