SQLスクリプトを出力するレガシーJavaプログラムがあります。次に、Apache Derbyを使用して、ターゲットデータベース(CRONと同じサーバー上にない)でそのSQLを実行します。
PuTTY経由で実行すると、これは正常に機能します。 Windowsで実行すると、これは正常に機能します。 CRONを使用して実行すると、Derbyは£記号を?として読み取ります。
(VIを使用して)生成されたSQLスクリプトを見ると、£記号が含まれています。ただし、データベースを確認すると、?が含まれています。
これをCRONで実行すると、プログラムの動作が異なるのはなぜですか?
CRONが問題だったようです。 Javaプログラムを実行し、結果をファイルに出力すると、正しく書き込めませんでした。私が読んでいたSQLファイルは、間違ったバージョンを指していました。
この問題を解決するために、CRONスクリプトの上部近くに次のコードを追加しました
export LANG = en_US.UTF-8
これにより、£記号が正しくフォーマットされていることが保証されました。
私にとって、言及された解決策は機能していませんでした。私が読んだ別の解決策は、設定することでした
「/ 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」を実行します。