大分間隔が空いてしまいました。
今回は国際化キャラクタ・セットの選択についてです。
国際化キャラクタ・セットについてはOracle9i物理設計では簡単にしか書いていませんし、割とベテランのOracleエンジニアの方でも国際化キャラクタ・セットについてはよくご存じない方がいらっしゃる分野だったりします。なので、今回はまず国際化キャラクタ・セットとは何ぞや、というところを中心にお話したいと思います。
国際化キャラクタ・セットもデータベースのキャラクタ・セットのひとつです。NCHAR型・NVARCHAR2型・NCLOB型といった、頭に「N」がつく文字列型のデータをデータベースに格納する際の文字コードの指定になります。これらのデータ型とCHAR型やVARCHAR2型、CLOB型といった普通の文字列型との違いは文字コード変換の方法にあります。普通の文字列型のデータは、DBのキャラクタ・セットとクライアント側の環境変数(Windowsの場合はレジストリ変数でも可)NLS_LANGに設定したキャラクタ・セットが異なる場合、文字コードの変換が発生します。一方の国際化キャラクタ・セットでは、クライアントにデータが到達する際もデータベースに格納した文字コードのままでコード変換が発生しません。この際NLS_LANGはエラーメッセージや日付のデフォルト書式などのみに影響します。
国際化キャラクタ・セットは「国際化」と名のつく通り、多言語環境を意識しています。そのため、指定できるキャラクタセットにはJA16SJISTILDEやJA16EUCといった特定の国の文字中心のものが存在しません。すべてUnicodeになります。デフォルトではAL16UTF16、他にはUTF8が選べるのみです。基本的にはデフォルトのAL16UTF16を指定するようにしましょう。AL16UTF16を指定するメリットや、AL16UTF16とUTF8の指定の使い分けなどについては次回に解説したいと思います。