我有一个输出 SQL 脚本的旧 Java 程序。然后我使用 Apache Derby 在目标数据库(与 CRON 不在同一台服务器上)上运行该 SQL。
通过 putty 运行时,此程序运行正常。在 Windows 中运行时,此程序运行正常。使用 CRON 运行时,Derby 将 £ 符号读取为 ?。
如果我查看生成的 SQL 脚本(使用 VI),它包含 £ 符号。但是,如果我检查数据库,它包含 ?。
为什么在 CRON 下运行这个程序会导致程序的行为有所不同?
答案1
看来问题出在 CRON 上。当 Java 程序运行并将结果输出到文件时,它无法正确写入。我读取的 SQL 文件指向了错误的版本。
为了解决这个问题,我在 CRON 脚本顶部附近添加了以下代码
export LANG = en_US.UTF-8
这确保了 £ 符号的格式正确。
答案2
对我来说,提到的解决方案不起作用。我读到的另一个解决方案是设置
“/etc/environment”文件中的“LANG=en_US.UTF-8”。
但也没有起作用。
对我来说有用的是使用以下命令打开 crontab 文件
crontab -e
并在开始时设置:
LANG=de_DE.UTF-8
LANGUAGE=de
LC_CTYPE=de_DE.UTF-8
PYTHONIOENCODING=utf8
这也设置了环境变量。
必须对每个要运行这些变量的用户执行此操作。对于 root,请在进入 crontab 之前运行“sudo -s”。