再現手順
% export LANG=ja_JP.UTF-8
% export NLS_LANG=Japanese_Japan.UTF8
% sqlplus scott/tiger
SQL> insert into emp(empno,ename) values(1,'ゔ');
SQL> select empno, ename from emp;
SQL> select * from v$version;
SQL> select nls_charset_name(nls_charset_id('char_cs')),nls_charset_name(nls_charset_id('nchar_cs')) from dual;
想定原因
- Unicode ではゔ(ひらがなの「う」に濁点)は存在するが、Shift-JIS には存在しない。
- そのため、データベースに JA16SJISTILDE キャラクタセットで保存される際にヴ(カタカナの「ウ」に濁点)に変換されているため。
- たぶん、サーバープロセスが OCI ライブラリを使ってマッピング表に従って変換している。
検証
- Oracle Locale Builderユーティリティを起動する。
- キャラクタ・セットで「JA16SJISTILDE」を選択する。
想定通り。