Oracle DB(AL32UTF8)に対してJDBCで接続して、S-JISのテキストファイルをOracle
DB(AL32UTF8)にあるテーブルに取り込もうとしているのですが、JDBCのCHARSETはどこでどのように機能しているのかがよくわかっておらず、JDBCのCHARSETはUTF-8にする必要があるのでしょうか。
CC BY-SA 4.0
2022-09-07T06:54:59.220
90976
2023-01-03T10:19:11.443
54056
question
oracle jdbc
oracle DBへのJDBCのcharsetについて
Oracleにはクライアント側が利用する環境変数にNLS_LANGがあります。  
NLS_LANGはもともと３部構成になっていて、以下3の部分が文字コードに関わります  
（NLS_LANG例）  
JAPANESE_JAPAN.JA16SJISTILDE  
1_______ 2____ 3____________

これは「Oracleサーバ側に、クライアント側の文字コードは××ですよ」と伝えるためのものです。  
もし、サーバ側のキャラクターセットと、クライアント側プログラムが扱うキャラクターセットが異なる場合であっても、この環境変数にさえクライアント側の要求するキャラクターセットを指定しておけば  
OracleNetサービスが自動で変換を行ってくれます。（クライアントアプリは意識する事ありません）  
言い方を変えると、Oracleは内部の文字コードが何であっても、クライアント側の指定するNLS_LANGに合わせてやり取りしてくれるといえます。  
今回のケースでは、Shift_JIS系のファイルをJavaで読み込みutf-8に変換するのであれば、  
NLS_LANG環境変数へJapanese_Japan.AL32UTF8を設定しておけば問題ないと思います。
CC BY-SA 4.0
2023-01-03T10:19:11.443
93165
2023-01-03T10:19:11.443
55896
90976
answer