使用 bash 运行 SQL*Plus 会导致编码错误

Pet*_*sik 2 oracle linux bash sqlplus

我在 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
Run Code Online (Sandbox Code Playgroud)

我从我们的内网下载插入语句,将其放入 sql 文件并通过 SQL*Plus 运行它。这工作正常。我的问题是,当我保存文件 script.sql 时,我的编码出错了。所有特殊字符(如 íáš?)都已损坏,这导致将错误的字符插入到我的数据库中。该文件的编码是 UTF-8,我们内网的 XSQL 页面上也设置了 UTF-8。所以我真的不知道哪里有问题。

也欢迎任何关于我的脚本的建议,我是 Linux 脚本的新手:-)

Pet*_*sik 7

好的,问题不在于文件(编码应该是 UTF-8),而在于 Oracle NLS_LANG 环境变量的设置。所以解决方案是在执行 SQL*Plus 脚本之前放置这一行

NLS_LANG="CZECH_CZECH REPUBLIC.UTF8" export NLS_LANG