環境作成して検証してみましたので、ご報告まで
検証環境の準備
- Oracle Database 11g Express Edition(XE) はdockerで wnameless/docker-oracle-xe-11g を使用してサーバー環境を作成。
- Oracle 11g XEのデフォルトの文字コードはUTF-8のため、Qiita - Oracle 11g XEのDBをShift JIS化する の記事の手順に従い
JA16SJIS
のデータベースを再作成する。
- 文字コード確認
sql
1SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'
2// 結果 JA16SJIS
検証を行うテーブル
sql
1create table TEST (
2 NORMAL_TEXT VARCHAR2(20)
3 , NLS_TEXT NVARCHAR2(20)
4);
Spring bootで検証用プログラムを作成
build.gradle
groovy
1compile('com.oracle:ojdbc6:11.2.0.3')
application.yml
yaml
1spring:
2 datasource:
3 url: jdbc:oracle:thin:@//127.0.0.1:1521/XE
4 username: test
5 password: test
6 driverClassName: oracle.jdbc.OracleDriver
Insert実行するためのプログラム
下記プログラムをEclipse上で作成し実行しました。
java
1@SpringBootApplication
2public class OracleTestApplication implements CommandLineRunner {
3
4 @Autowired
5 JdbcTemplate jdbcTemplate;
6
7 @Override
8 public void run(String... strings) throws Exception {
9
10 String text = "あいうえお";
11 jdbcTemplate.update("INSERT INTO test VALUES (?, ?)", text, text);
12 }
13
14 public static void main(String[] args) {
15 SpringApplication.run(OracleTestApplication.class, args);
16 }
17}
結果
shell
1oracle@0690176d4c2d:~$ env
2ORACLE_SID=XE
3ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
4USER=oracle
5PWD=/u01/app/oracle
6HOME=/u01/app/oracle
7MAIL=/var/mail/oracle
8SHELL=/bin/bash
9TERM=xterm
10SHLVL=1
11LOGNAME=oracle
12PATH=/u01/app/oracle/product/11.2.0/xe/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
13_=/usr/bin/env
14oracle@0690176d4c2d:~$ sqlplus test/test
15
16SQL*Plus: Release 11.2.0.2.0 Production on Sat Jul 21 16:10:07 2018
17
18Copyright (c) 1982, 2011, Oracle. All rights reserved.
19
20
21Connected to:
22Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
23
24SQL> select * from test;
25
26NORMAL_TEXT NLS_TEXT
27-------------------- --------------------
28????? ?????
29
30SQL>
結果文字化けしていましたが、環境変数 NLS_LANG=Japanese_Japan.UTF8
を設定して再度SELECT文を発行したところ以下のように文字化けせずに表示できました。
shell
1Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
2oracle@0690176d4c2d:~$ export NLS_LANG=Japanese_Japan.UTF8
3oracle@0690176d4c2d:~$ sqlplus test/test
4
5SQL*Plus: Release 11.2.0.2.0 Production on 土 7月 21 16:11:54 2018
6
7Copyright (c) 1982, 2011, Oracle. All rights reserved.
8
9
10
11Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
12に接続されました。
13SQL> select * from test;
14
15NORMAL_TEXT
16------------------------------------------------------------
17NLS_TEXT
18------------------------------------------------------------
19あいうえお
20あいうえお
21
22
23SQL>
saziさんのコメントに
文字コードの変換はjdbcドライバが担ってくれます
とありましたので、この検証結果の内容と一致したものと思います。