2010-10-26 62 views
5

我们需要在同一个数据库模式中存储不同语言的char数据。 Oracle 10g是我们的数据库。我希望有人已经这样做会给我更具体的说明如何启用oracle 10g db。我们只需要存储来自多个语言环境的数据以及整理(希望所有主要数据库都支持此功能)在数据库级别的支持。我们不需要格式化日期,日期时间,数字,货币等。oracle和i18n支持

我读了一些有关oracle的i18n支持的文档,但对它们的许多nls_ *属性有些困惑。我是否应该使用nls_lang或nls_language或NLS_CHARACTERSET .....

回答

6

假设您正在从头开始构建数据库,而不是尝试改造引入其他问题的现有数据库。

在数据库中,您需要确保数据库字符集支持您要存储的所有字符。据推测,这意味着将数据库的NLS_CHARACTERSET设置为AL32UTF8。就个人而言,我更愿意将NLS_LENGTH_SEMANTICS设置为CHAR。这改变了VARCHAR2(n)的默认行为来分配n个存储字符而不是n个字节。由于AL32UTF8是一个可变长度字符集,因此使用字节语义通常是有问题的,因为您必须声明长度为3倍的字段,并且最终不同的用户能够在同一字段中输入不同数量的字符。

NLS_LANG是一个客户端设置。这标识了客户端将要请求数据转换成的字符集。这通常取决于操作系统的代码页。

+0

thx明确的答案。 AL32UF8是什么意思。这与UTF8不同吗? – 2010-10-26 03:37:58

+1

AL32UTF8是UTF8 ver。 3.1 – walla 2010-10-26 07:40:49

+0

谢谢。稍微更详细的信息可以在http://oracleappstechnology.blogspot.com/2007/10/difference-between-utf8-and-al32utf8.html – 2010-10-26 15:16:55