データベースキャラクタセット、各国語キャラクタセット名の取得
NLS_CHARSET_ID ( character_set_name )
NLS_CHARSET_NAME ( character_set_id )
return [ id | name ]
character_set_name | キャラクタセット名 |
character_set_id | キャラクタセットID |
NLS_CHARSET_DECL_LEN ( byte_count , character_set_id)
return [ integer ]
byte_count | 数値式:文字列のバイト数 |
character_set_id | キャラクタセットID |
- 指定キャラクタセットで格納するときの項目長の定義を戻す。
キャラクタセット名
キャラクタセットの種類 | character_set_name 引数 |
データベースキャラクタセット | CHAR_CS |
各国語キャラクタセット | NCHAR_CS |
Shift-JIS | JA16SJIS |
JA16SJISTILDE |
EUC-JP | JA16EUC |
JA16EUCTILDE |
UTF-8 | AL32UTF8 |
UTF-16 | AL16UTF16 |
NLS_CHARSET_ID、NLS_CHARSET_NAME 関数の内容
キャラクタセット の ID と 名称 の正引きと逆引きを行なう。
現在使用中のデータベースの CHAR や VARCHAR2 などの文字コード=「データベースキャラクタセット」と NCHAR や NVARCHAR2 などの「各国語キャラクタセット」の名称へのエイリアスとして、'CHAR_CS' と 'NCHAR_CS' というキャラクタセット名が用意されている。
NLS_CHARSET_DECL_LEN 関数の内容
文字列を格納するのに必要となるカラム長を求める。(byte セマンティクス ⇒ char セマンティクス 変換)
NLS_CHARSET_DECL_LEN 関数の追加説明
例えば、ある 「キャラクタセット ID 」の文字列の格納に必要なバイト長さを調べるには
LENGTHB を使用する。
逆に character_set_id で 文字列長が X バイトの文字列を格納するのに必要な カラム定義 の数を調べるために NLS_CHARSET_DECL_LEN 関数を使用できる。
AL32UTF8 は 1 〜3 バイト以上 (補助文字は 4 バイトまたは 6バイト) で構成される。AL16UTF16 は 2バイトの固定長である。
それぞれのエンコードで 6バイト の文字列があるときに、文字数が最大となるパターンの文字列を格納可能な項目長の定義 NCHAR( X ) の X は UTF8 で NCHAR(6 [char] )、 UFT16 で NCHAR( 3 [char] )である。
ついでに指定バイト数で格納できる最小の文字数を取得する関数もあったらよかったのですが…
バージョンによって AL32UTF8 は Oracle 10g R1 において一部の特殊文字を 3バイト× 2 で保存、Oracle 10g R2 において Unicode 4.0 サポートにより 4 バイトで保存しているようなので、現行仕様では 4000 バイトで X 文字という情報が欲しい。
NLS_CHARSET_ID、NLS_CHARSET_NAME 使用例
現在のデータベースのキャラクタセット、各国語キャラクタセットを調べる
SQL> select NLS_CHARSET_NAME(NLS_CHARSET_ID('char_cs')) db_charset ,
2 NLS_CHARSET_NAME(NLS_CHARSET_ID('nchar_cs')) national_cs from dual;
DB_CHARSET NATIONAL_CS
-------------------------- ------------------
JA16SJISTILDE AL16UTF16
NLS_CHARSET_DECL_LEN 使用例
SQL> select NLS_CHARSET_DECL_LEN( 6, nls_charset_id('ja16sjis')) sjis,
2 NLS_CHARSET_DECL_LEN( 6, nls_charset_id('ja16euc')) euc_jp,
3 NLS_CHARSET_DECL_LEN( 6, nls_charset_id('al16utf16')) utf16,
4 NLS_CHARSET_DECL_LEN( 6, nls_charset_id('al32utf8')) utf8
5 from dual;
SJIS EUC_JP UTF16 UTF8
---------- ---------- ---------- ----------
6 6 3 6
キャラクタセット