3

我想建立一个参数为'Thai Buddha'的数据库( Oraclev 12.1.0.2),同时我需要保持字符集为AL32UTF8NLS_CALENDAR

当我在设置NLS_CALENDAR参数时这样做时,不会在数据库级别更改。SELECT SYSDATE FROM DUAL返回AD 中的当前日期(年份是 2016,在泰语中应该是 2559)

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

有没有我应该遵循的具体指导方针来完成这项工作?还是我应该改变任何其他参数?

4

3 回答 3

2

设置字符集:

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

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

或者使用Oracle 提供的迁移说明

设置日历:

要在数据库级别更改NLSOracle 参数ALTER SYSTEM ... SCOPE=BOTH,您必须使用或ALTER DATABASE ...

所以对于你的情况:

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

您必须在Oracle 文档中深入了解更多信息

于 2016-07-22T07:05:13.567 回答
2

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

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

这会做。干杯

于 2016-08-29T09:17:08.333 回答
1

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

NLS_LANG 的默认值(如果未设置)为 AMERICAN_AMERICA.US7ASCII。NLS_CALENDER 的情况类似。请检查以下链接:

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

于 2016-07-22T07:14:01.020 回答