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

使用 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

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

并且还欢迎任何有关我的脚本的建议,我是 Linux 脚本方面的新手:-)

答案1

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

NLS_LANG="CZECH_CZECH REPUBLIC.UTF8" export NLS_LANG

答案2

您可能需要将插入内容转换为 ISO8859 代码页。检查 Oracle 服务器上正在使用的编码。编码应类似于“WE8ISO8859P1”或类似的内容,这将告知正在使用的 ISO 代码页。

您可以使用图标或类似方法将您的文件从 UTF-8 编码转换为 ISO8859 编码,然后尝试通过 SQL*Plus 运行它。

相关内容