Oracle字符编码

3

我在DEV服务器上有一个MVIEW,其定义如下:

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

MVIEW已经安装在PROD服务器上,当我检查其查询时,发现字符°未被识别。

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。有什么想法为什么会发生这种情况以及如何纠正它?或者我需要重命名我的别名吗?
2个回答

5
每当您看到一个问号而不是特殊字符时,这意味着客户端的字符集不支持该字符,并且无法进行转换。
转换发生在以数据库字符集为源和客户端字符集为目标的情况下。环境变量NLS_LANG可让您控制客户端字符集。必须在打开连接之前设置NLS_LANG,并且不能在会话期间更改。
有关NLS_LANG的更多信息,请参阅Oracle® Database Globalization Support Guide 顺便说一句,NLS_LANGUAGE与字符集无关!它仅控制服务器消息和区域设置中使用的语言。

4
我强烈建议将您的别名更改为简单的名称,例如NO_INVOICE,不包含任何不寻常的字符,并且不需要嵌入双引号来引用。不应该将列名视为报告格式化标题 - 在报告中进行格式化处理。使用这样的非标准字符,您将在不同的环境设置(如NLS_LANG)中遇到问题。

谢谢Tony,这也是我建议的,但我也想知道为什么会发生这种情况。 - mcha
在涉及字符集问题时,不要提到NLS_LANGUAGE。这是由NLS_LANG负责的。 - HAL 9000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接