我们的应用程序旨在与带有 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
角色。AL16UTF16
。有什么办法吗?
答案 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属性中进行设置。