【问题标题】:Set up a Database with NLS_CALENDAR parameter as 'Thai Buddha'将 NLS_CALENDAR 参数设置为“Thai Buddha”的数据库
【发布时间】:2016-07-22 06:31:25
【问题描述】:

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

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

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

我应该遵循什么具体的指导方针来完成这项工作?或者我应该更改任何其他参数吗?

【问题讨论】:

    标签: database oracle calendar thai


    【解决方案1】:

    设置字符集:

    这应该在数据库创建时设置 - 在您输入数据之前。但是如果不能重新创建数据库,连接为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 中挖掘更多信息

    【讨论】:

    • 谢谢,但不幸的是,这对我不起作用。
    【解决方案2】:

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

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

    这样就可以了。干杯

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 即使在注册表级别的更改也不起作用。还有其他可能的方法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多