cx_OracleのEncodingに関するエラーが出た時の対処

UnicodeEncodeError: ‘shift-jis’ codec can’t encode character ~~~~~
と出て、

sys.getdefaultencoding()をたたいてみたりしたけど、
特に問題はなさそうな場合

たいてい、原因はNLS_LANGにあります。

目次

NLS_LANGをJAPANESE_JAPAN.AL32UTF8にしてあげる

他のサイトでNLS_LANGをJAPANESE_JAPAN.JA16SJISTILDEにするといった記述があったのですが、
私の場合はうまいこと行かなかったです。

※追記
 対象のORACLEのDBでselect value from nls_database_parametersをたたくと、
 ご自身がどちらに設定すればいいのかが出てきます。

上手くいく人もいるかもしれないので、一応記載しておきます。

import cx_Oracle
import os

os.environ['NLS_LANG'] = 'JAPANESE_JAPAN.AL32UTF8'
# ------略-------

PC自体の設定で変えてあげてもいいのかもしれないですが、
影響範囲が大きくなると面倒なので、
プログラム内で記述しております。

補足

OracleでSQLを流した時に日付形式についてもよくハマることがあるので、
そんな時はNLS_DATE_FORMATに日付の形式を追加してあげるとうまく動きます。

import os

os.environ['NLS_DATE_FORMAT'] = "YYYY-MM-DD HH24:MI:SS"

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次