Oracle 数据库字符集
Posted
技术标签:
【中文标题】Oracle 数据库字符集【英文标题】:Oracle Database Character Set 【发布时间】:2010-12-16 23:01:29 【问题描述】:您好,我如何更改或更改数据库的字符集以支持日本语字符
【问题讨论】:
您当前的数据库和国家字符集是什么? 【参考方案1】:您应该可以使用任何种类的 UTF-8。
字符集通常在创建数据库时指定。如果以后需要改的话,有ALTER DATABASE CHARACTER SET command,不过需要数据迁移:
要更改数据库字符集,请执行以下步骤:
使用 SHUTDOWN IMMEDIATE 或 SHUTDOWN NORMAL 语句关闭数据库。 对数据库进行完整备份,因为 ALTER DATABASE CHARACTER SET 语句无法回滚。 完成以下陈述:
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET new_character_set;
SHUTDOWN IMMEDIATE; -- or SHUTDOWN NORMAL;
STARTUP;
如您所见,您需要离线并转换数据库。
【讨论】:
更改字符集时会发生错误。它说必须设置一个超集。我尝试将其更改为 AL32UTF8 要以可能具有破坏性的方式更改字符集(您的原始数据可能不再可用),请添加 internal_use: ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;见kods.net/modify-the-oracle-character-set-character-set 对于任何感兴趣的人,我认为收到的错误一定是 SQL Error: ORA-12712: new character set must be a superset of old character set 。希望给出的答案能帮助遇到这个问题的其他人。 命令ALTER DATABASE CHARACTER SET ...
自 Oracle 10R1 起不再支持,您可能会破坏您的数据库(参见示例 ***.com/questions/15224015/…)。但是,如果旧字符集是 US7ASCII
,那么这种方法可能会异常有效。【参考方案2】:
Unicode 是你的朋友,使用 NVARCHAR 或 NTEXT。
【讨论】:
搞笑..呵呵..从来没想过检查列类型..Tnx 虽然 NVARCHAR2 或 NCHAR 数据类型可以工作(假设 National 字符集为 AL16UTF16),但请注意,使用 National 字符集对象通常会给应用程序增加相当多的复杂性。不同的工具通常不能与国家字符集对象一起正常工作,或者需要额外的标志或设置,或者需要调用不同的 API。换句话说,它不一定是 VARCHAR2 列的直接替代品。 与贾斯汀的部分协议 :-) 可以增加一些复杂性,但也可以消除一些。但在过去几年中,各种工具对 Unicode 的支持越来越好,这绝对是未来。以上是关于Oracle 数据库字符集的主要内容,如果未能解决你的问题,请参考以下文章