2011-05-16 37 views
3

我作为Oracle字符编码

CREATE MATERIALIZED VIEW MY_MVIEW 
AS 
SELECT col1 AS "N° INVOICE" from TABLE 

的MVIEW开发服务器上MVIEW已安装PROD服务器上,当我检查其查询我有°无法识别characther

SELECT query from user_mviews where mview_name = 'MY_MVIEW' ; 

QUERY 
--------------------------------------- 
SELECT col1 AS "N? INVOICE" from TABLE 

我们使用Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 两种环境。

任何想法为什么发生这种情况,以及如何纠正它?或者我需要重命名我的别名?

回答

5

只要您看到问号而不是特殊字符,就意味着客户端的字符集不支持该字符,并且转换不可用。

转换发生在数据库字符集作为源和客户端字符集作为目标。环境变量NLS_LANG可让您控制客户端字符集。必须在连接打开之前设置NLS_LANG,并且在会话期间不能更改它。

有关NLS_LANG更多信息,请参阅Oracle® Database Globalization Support Guide

BTW,NLS_LANGUAGE无关与字符集!它仅控制服务器消息和区域设置中使用的语言。

4

我肯定会推荐将你的别名重命名为NO_INVOICE这样的简单类,它不包含任何不寻常的字符,也不需要嵌入双引号引用。将列名称视为格式化报表标题是不恰当的 - 在报表中执行此操作。对于像这样的非标准字符,您将遇到像NLS_LANG这样的不同环境设置的问题。

+0

感谢托尼,它也是我的建议,但我也想知道为什么发生这种情况的原因是 – mcha 2011-05-16 09:50:30

+0

-1提及与字符集问题有关的NLS_LANGUAGE。 NLS_LANG负责。 – 2011-05-16 10:37:34

+0

更正。谢谢。 – 2011-05-16 10:40:40