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 数据库字符集的主要内容,如果未能解决你的问题,请参考以下文章

如何修改oracle的字符集编码

如何查看和修改Oracle数据库服务器端的字符集

如何修改Oracle数据库字符集

oracle 10如何修改字符集?

oracle里转换字符集用啥函数

如何查看oracle用的啥字符集