文字コードの違いについて実験したい(1) ~文字セットの確認と変更~ | 今日もなんだかいい天気♪

今日もなんだかいい天気♪

毎日ひとつでも、いいことがあるといいねぇ。

テーマ:
仕事で、文字セットがSJISのデータベースのデータをEUCのデータベースに移行することになっている。
そんなわけで、その影響について調べてみることにする。

ウチのWindowsに入っているOracleは・・・
画像

NLS_CHARACTERSETがJA16SJISだ。
(DBCAでカスタムデータベース以外で作成するとこうなるはず)

職場のDBではJA16SJISTILDEなので、変更したい。
・・・が。
画像


ダメだった。
ところで、「スーパーセット」ってなんだ?
スーパーでお肉とかが3パック1000円とかで売っていたりするが、そういうセットなのか。
スーパーセット、それで通じるのか?
まぁ調べてみることにしよう(後日)。

で、とっととあきらめて、DBCAを使ってDBを再作成することにした。
文字セットはカスタムデータベースで作成しないと任意に設定できない。
画像


「カスタム」だから、いろいろと設定させられるが、データベース名とパスワードくらい指定して、あとはデフォルトのまま、ぽんぽんと進む。
で、「初期化パラメータの設定」のところで、キャラクタセットを指定する。
画像


というわけで、現在DB再作成中・・・。
大したサイズじゃないのに、時間が掛かるわ。

で、サブセットっていうのは、ある仕様のうちその一部分を満たす仕様ということだそうな。
つまり、JA16SJISはJA16SJISTILDEのサブセットということになるわけだ(たぶん)。とすると、当然変更は無理だわな。

Shift The Oracleに以下のような記述があった。
http://www.shift-the-oracle.com/oracle/limits.html
『CREATE DATABSE で作成したデータベースのキャラクタセットは変更することができない。
( ALTER DATABASE CHARACTER SET 構文は無くなった。(実行ができるか未検証) )
日本語キャラクタセットの場合で望まれているであろう、EUC⇔SJISなどのコード変換を伴う変更は、もともとサポートされていない。 ALTER DATABASE CHARACTER SET で行なうことができた変更は、すべての文字に対して移行先に文字が存在し、同じコードポイント(バイト列)をもつことが必要=スーパーセットである場合に限られていた。』

というわけで、JA16SJISTILDEからJA16SJISには変更できそうな気がするが・・・あ、違うか。
チルダとかのコードが違うんだよね。
試してみればわかることなんだろうけど、今はちょっとパス。

で、DB再作成後の設定はこうなっている。
画像


ちゃんとJA16SJISTILDEになった。
めでたしめでたし。

というわけで、つづく。