使用 NLS_CALENDAR 参数设置数据库为 'Thai Buddha'

Set up a Database with NLS_CALENDAR parameter as 'Thai Buddha'

我想设置一个数据库 (Oraclelev 12.1.0.2),NLS_CALENDAR 参数为 'Thai Buddha',同时我需要保持字符集为AL32UTF8.

当我在设置时执行此操作时 NLS_CALENDAR 参数不会在数据库级别更改。 SELECT SYSDATE FROM DUAL returns A.D中的当前日期(年份是 2016,在泰语中应该是 2559)

但是如果我更改会话并将 NLS_CALENDAR 参数设置为 'Thai Buddha' SELECT SYSDATE FROM DUAL returns 日期 2559.

是否有任何我应该遵循的特定指南来完成此操作?或者是否有任何其他我应该更改的参数?

设置字符集:

这应该在创建数据库时设置 - 在您输入数据之前。但是如果你不能重新创建数据库,连接为 sysdba:

SHUTDOWN IMMEDIATE;
STARTUP RESTRICT;
ALTER DATABASE CHARACTER SET AL32UTF8;

或使用migration instructions provided by Oracle

设置日历:

change NLS Oracle parameters在数据库级别,你必须使用ALTER SYSTEM ... SCOPE=BOTHALTER DATABASE ...

所以对于你的情况:

ALTER SYSTEM SET NLS_CALENDAR="Thai Buddha" SCOPE=BOTH;

您必须在 Oracle Documentation

中挖掘更多内容

要在默认级别进行更改,您需要进行注册表级别的更改。

如果未设置,NLS_LANG 的默认值为 AMERICAN_AMERICA.US7ASCII。 NLS_CALENDER 的情况也类似。请查看下方 link:

https://docs.oracle.com/cd/B28359_01/win.111/b32010/registry.htm

如果有人还在寻找这个,可以在设置数据库时完成。更改以下 NLS_PARAMETERS

NLS_CALENDAR  = 'Thai Buddha'; 
NLS_DATE_LANGUAGE  = 'THAI'; 
NLS_DATE_FORMAT = 'DD_MM_RR';

这样就可以了。干杯