如何在RDS Oracle数据库上将charset(NLS_CHARACTERSET)和National Charset(NLS_NCHAR_CHARACTERSET)更改为UTF8?

时间:2015-08-06 12:58:48

标签: oracle amazon-web-services utf-8 character-encoding amazon-rds

我们的应用程序旨在与带有 Charset NLS_CHARACTERSET)和 National Charset NLS_NCHAR_CHARACTERSET)的Oracle 11g数据库一起使用UTF8。

在Amazon Relational Database Service(RDS)上推出Oracle数据库实例时,我提示选择我设置为UTF8的 Charset

但是,我无法找到设置 National Charset 的方法,并且在创建数据库期间此参数设置为AL16UTF16

我尝试了以下内容:

  • 创建了一个新参数组来设置NLS_NCHAR_CHARACTERSET,但参数未列出。我还尝试使用AWS CLI强制使用此参数创建新的参数组。
  • 尝试了ALTER数据库,但亚马逊托管数据库实例上没有SYSDBA角色。
  • 使用不同的 Charset 参数创建不同的Oracle RDS数据库,以检查 National Charset 是否受到影响,但仍设置为AL16UTF16

有什么办法吗?

3 个答案:

答案 0 :(得分:2)

可以使用AWS CLI在实例创建期间通过指定--character-set-name来设置参数。到目前为止,我还没有发现为现有实例更改它。

在我的测试中,我使用--character-set-name KO16MSWIN949设置它,它将支持基于AWS doc的韩语:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html

答案 1 :(得分:1)

AWS RDS无法将Oracle数据库国家字符集(NLS_NCHAR_CHARACTERSET)设置为UTF8。 NLS_NCHAR_CHARACTERSET将始终为AL16UTF16。数据类型NVARCHAR2,NCHAR和NCLOB受到影响。为了便于讨论,我将这些数据类型称为NCHAR。

使用AL16UTF16会对迁移产生空间影响。顾名思义,所有字符都存储为16位(2字节)。例如,西方字母“ A”将零填充为“ \ 0”,“ A”。

因此,迁移目标处的空间需求可能会比迁移源处的空间需求高。高多少取决于NCHAR列的普遍性。根据经验,实际示例高出25%。传统硬件上的8 TB模式在AWS RDS上需要10 TB。

如果您的NLS_CHARACTERSET是AL32UTF8,那么防止迁移到浪费空间的AL16UTF16字符集的一种方法是将NCHAR列迁移到CHAR。示例:

来自:

CREATE TABLE ...
( "BUSINESS_UNIT" NVARCHAR2(5) NOT NULL ENABLE, 

收件人:

alter session set NLS_LENGTH_SEMANTICS = 'CHAR';
CREATE TABLE ...
( "BUSINESS_UNIT" VARCHAR2(5) NOT NULL ENABLE,
etc.

答案 2 :(得分:0)

使用Cloudformation,您也可以在AWS :: RDS :: DBInstance的CharacterSetName属性中进行设置。