実現したいこと
- Insertされた文字列が文字化けしてしまう現象の解消。
- bat実行画面は文字化けしていません。
環境
- Oracle サーバー 19c EE
- Oracle クライアント 19.3
- サーバーとクライアントOSはWindows10
前提
batファイルでsqlファイルを実行し、テーブル作成・データ追加を行おうとしています。
CreateDB.batを実行することで、その動作をさせようと思っています。
該当のソースコード
CreateDB.bat
1@echo off 2chcp 65001 3set NLS_LANG=Japanese_Japan.UTF8 4 5cd /d %~dp0 6@REM Execute SQL 7sqlplus /nolog @CreateDB.sql 8 9echo "If you want close this window , click any key..." 10pause > nul
CreateDB.sql
1CONNECT {Username}/{Pass}@{FQDN}:1521/ORCL 2@"TBL.sql" 3 4EXIT;
TBL.sql
1CREATE SEQUENCE SEQ_ATTR INCREMENT BY 1 2START WITH 1; 3 4CREATE TABLE ATTRIBUTES ( 5 ID NUMBER(5,0) DEFAULT SEQ_ATTR.nextval not null, 6 NAME VARCHAR2(4000 CHAR) NOT NULL, 7 PRIMARY KEY (ID) 8); 9 10INSERT INTO ATTRIBUTES (NAME) VALUES ('Main'); 11INSERT INTO ATTRIBUTES (NAME) VALUES ('日本語');
試したこと
1,
bat, sql各ファイルがどの文字コードで書かれているか確認しました。
=>UTF-8でした。
2,
sqlで文字コードを指定するときは、Oracleインストール時に指定すると考えたため、
消去法でbashで文字コードを指定しなければと考えました。
そのため、CreateDB.batにchcp 65001を加えました。
=>文字化けすることに変わりはなかったが、文面は変わりました。
3,
batかsqlplusかそれ以外か、どの部分が原因なのかわからなかったので、
切り分けを目的としてSQL DeveloperからInsertしました。
これが文字化けするのなら、Oracle自体の設定ミスかと思いますので。
=>コミットは成功し、日本語英語ともに正常にInsertできました。
4,
set NLS_LANG=Japanese_Japan.UTF8
をCreateDB.batに追記しました。
=>bat実行時の出力("行を一行追加しました"など)は文字化けし、Insertされた文字列も文字化けしています。
5,
CreateDB.batの
chcp 65001
set NLS_LANG=Japanese_Japan.UTF8
を
@REM chcp 65001
set NLS_LANG=Japanese_Japan.UTF8
に変更しました。
=>
bat実行時の出力も文字化けしなかったが、Insertされた日本語文字列は文字化けしていました。
また、bat実行時先頭行に
環境変数NLS_LANG=Japanese_Japan.UTF8 が定義されていませんと記載されていることに先ほど気が付きました。
6,
Oracleの文字コードを
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
で確認したら
AL32UTF8
でした。
アドバイスを頂けないでしょうか?
また、質問の仕方自体に悪い点がある場合もご指摘いただければ助かります(ここで質問するのは初めてなのです)。

回答1件
あなたの回答
tips
プレビュー