ablog

不器用で落着きのない技術者のメモ

Oracle Database に「ゔ」を insert した後、select すると「ヴ」になる

現象

  • Oracle Database に「ゔ(ひらがなのうに濁点)」を insert した後、select すると「ヴ(カタカナのウに濁点)」になる。
  • データベースのキャラクタセットは JA16SJISTILDE。
  • クライアント環境は SQL Developer on Windows 7
  • sqlplus on Mac OS X Snow Leopard でも再現。

再現手順

% 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」を選択する。

  • [文字の置換]を選択する。


想定通り。