NLS 関連初期化パラメータ(NLS 環境変数)
NLS_〜 パラメータは各国語サポート用のパラメータで、DATABASE、INSTANCE、SESSION と 3 段階があり、その値には列挙タイプのパラメータ、フォーマット指定などの任意の文字列での指定を行う。
また、一部のパラメータは接続クライアントからの同じ名前の環境変数を使用して ユーザー・プロセス の動作環境を変更することができる。
すべてのパラメータが環境変数と対になっているわけではない。
NLS_LANG 環境変数は {NLS_LANGUAGE}_{NLS_TERRITORY}.{NLS_CHARACTERSET} であらわし、同時にそのユーザー・プロセスにおける 3つの NLS 初期化パラメータを設定する。しかし、NLS_CHARACTERSET は環境変数に設定しても効果がない。
NLS パラメータ (一部抜粋)
| パラメータ | 設定値(設定内容の例) | 別の代表的な設定例 |
| NLS_CALENDAR | GREGORIAN | JAPANESE IMPERIAL |
| NLS_CHARACTERSET | JA16EUCTILDE | JA16SJISTILDE |
| NLS_COMP | BINARY | LINGUISTIC BYTE、ANSI の三択 ANSI は下位互換用 |
| NLS_CURRENCY | ¥ | |
| NLS_DATE_FORMAT | YYYY/MM/DD HH24:MI:SS | RR-MM-DD HH24:MI:SS 書式モデル(日付)を参考 |
| NLS_DATE_LANGUAGE | JAPANESE | AMERICAN |
| NLS_DUAL_CURRENCY | ¥ | |
| NLS_ISO_CURRENCY | JAPAN | |
| NLS_LANGUAGE | JAPANESE | AMERICAN |
NLS_LENGTH_SEMANTICS  | BYTE | CHAR(BINARY と二択) |
| NLS_NCHAR_CHARACTERSET | AL16UTF16 | UTF8*1 |
NLS_NCHAR_CONV_EXCP  | FALSE | |
| NLS_NUMERIC_CHARACTERS | ., | ,.*2 |
| NLS_RDBMS_VERSION | 10.1.0.2.0 | |
| NLS_SORT | BINARY | JAPANESE_M*3 (JAPANESE_M_CI) |
| NLS_TERRITORY | JAPAN | |
NLS_TIMESTAMP_FORMAT  | RR-MM-DD HH24:MI:SSXFF | 書式モデル(日付)を参考 |
NLS_TIMESTAMP_TZ_FORMAT  | RR-MM-DD HH24:MI:SSXFF TZR | 書式モデル(日付)を参考 |
| NLS_TIME_FORMAT | HH24:MI:SSXFF | 書式モデル(日付)を参考 |
| NLS_TIME_TZ_FORMAT | HH24:MI:SSXFF TZR | 書式モデル(日付)を参考 |
NLS_* パラメータの現在の値を調べる
V$NLS_PARAMETERS ビューに格納されている。
⇒ データベースの OS 関連情報を取得する
SQL> select * from v$nls_parameters;
PARAMETER VALUE
-------------------------- ------------------------------
NLS_CALENDAR GREGORIAN
NLS_CHARACTERSET JA16EUCTILDE
NLS_COMP BINARY
NLS_CURRENCY \
NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS
NLS_DATE_LANGUAGE JAPANESE
NLS_DUAL_CURRENCY \
NLS_ISO_CURRENCY JAPAN
NLS_LANGUAGE JAPANESE
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NCHAR_CONV_EXCP FALSE
NLS_NUMERIC_CHARACTERS .,
NLS_SORT BINARY
NLS_TERRITORY JAPAN
NLS_TIMESTAMP_FORMAT YYYY-MM-DD HH24:MI:SS
NLS_TIMESTAMP_TZ_FORMAT RR-MM-DD HH24:MI:SSXFF TZR
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_CALENDAR
SQL> ALTER SESSION SET NLS_CALENDAR='JAPANESE IMPERIAL';
セッションが変更されました。
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
------------------------------------------
平成17年08月13日
SQL> ALTER SESSION SET NLS_CALENDAR='GREGORIAN';
セッションが変更されました。
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
--------
05-08-13
NLS_DATE_LANGUAGE
暦(月、曜日)をあらわす言語の指定、Oracle 10g から月の名前('MON')が日本語名に変更されている。
デフォルト値は NLS_LANGUAGE を継承
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='JAPANESE';
セッションが変更されました。
SQL> SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL
*
行1でエラーが発生しました。:
ORA-01846: 指定した曜日が無効です。
SQL> SELECT NEXT_DAY(SYSDATE, '月曜') FROM DUAL;
NEXT_DAY(SYSDATE,'
-------------------
2005/08/08 23:08:12
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
セッションが変更されました。
SQL> SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
NEXT_DAY(SYSDATE,'M
-------------------
2005/08/08 23:08:12
SQL> SELECT NEXT_DAY(SYSDATE, '月曜') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, '月曜') FROM DUAL
*
行1でエラーが発生しました。:
ORA-01846: 指定した曜日が無効です。
NLS_DATE_FORMAT
SQL> SELECT SYSDATE FROM DUAL ;
SYSDATE
--------
05-02-11
SQL> ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
セッションが変更されました。
SQL> SELECT SYSDATE FROM DUAL ;
SYSDATE
-------------------
2005-02-11 15:15:10
NLS_LENGTH_SEMANTICS
NLS_LENGTH_SEMANTICS を 'CHAR' にすると文字列の指定は CHAR 単位になる。BYTE 単位にしたい場合には明示的に指定しなければならない。
SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS='CHAR';
セッションが変更されました。
SQL> CREATE TABLE CHARBASE_TABLE(
2 NAME1 VARCHAR2(5),
3 NAME2 VARCHAR2(5 BYTE)
4 );
表が作成されました。
SQL> DESC CHARBASE_TABLE
名前 NULL? 型
----------------------------------------- -------- ----------------------------
NAME1 VARCHAR2(5)
NAME2 VARCHAR2(5 BYTE)
SQL> INSERT INTO CHARBASE_TABLE VALUES ('あいうえお', '12345');
1行が作成されました。
SQL> INSERT INTO CHARBASE_TABLE VALUES ('123456', 'あい');
INSERT INTO CHARBASE_TABLE VALUES ('123456', 'あい')
*
行1でエラーが発生しました。:
ORA-12899: 列"RIVUS"."CHARBASE_TABLE"."NAME1"の値が大きすぎます(実際: 6、最大:
5)
SQL> INSERT INTO CHARBASE_TABLE VALUES ('12345', 'あいう');
INSERT INTO CHARBASE_TABLE VALUES ('12345', 'あいう')
*
行1でエラーが発生しました。:
ORA-12899: 列"RIVUS"."CHARBASE_TABLE"."NAME2"の値が大きすぎます(実際: 6、最大:
5)
SQL> INSERT INTO CHARBASE_TABLE VALUES ('あいうえお', 'あい');
1行が作成されました。
SQL>
SQL> SELECT * FROM CHARBASE_TABLE ;
NAME1 NAME2
---------- ----------
あいうえお 12345
あいうえお あい
SQL>
SQL> DROP TABLE CHARBASE_TABLE;
表が削除されました。
NLS_TERRITORY
NLS_TERRITORY により影響のある項目 カッコ内は日本仕様
- 日付書式 (RR-MM-DD)
- 時刻の書式 (hh24:MI:SS)
- 週初めの曜日(日曜) ISO は月曜
- 小数点文字とグループ・セパレータ(,.)
- 通貨記号 (¥)
- ISO 通貨記号 (JPY)
以下はよくわかりません。
- 貸方および借方記号 ⇒ NLS_CREDIT(' ':空白) / NLS_DEBIT(-:マイナス) : 書式フォーマットに影響する?
- ISO 週フラグ ( ? ) IW 書式に影響(年の最初の暦週:日曜/月曜)?
- リスト・セパレータ(カンマ(,) でない国がある? )
NLS_LANGUAGE
NLS_LANGUAGEのより影響のある項目 カッコ内は日本仕様
- サーバー・メッセージの言語 エラーメッセージが日本語になる。
- 月の名称 (数値のまま) 、Oracle 10g では '1月' などになる。
- 曜日の名称(日曜〜土曜)
- ソート順 (デフォルトではバイナリ)
- 書き込み方向(左から右へ)
- 「はい、いいえ」の選択肢が必要なときの入力文字列 (たぶん YES、NO )
NLS_SORT
JAPANESE_M_CI を使用すると大文字、小文字、半角、全角を区別しないで扱うことができる。
関連ディクショナリビュー
V$NLS_PARAMETERS
NLS_DATABASE_PARAMETERS
NLS_INSTANCE_PARAMETERS
NLS_SESSION_PARAMETERS
関連事項