plsql:关于查询结果中汉字显示为问号和以汉字当别名出现ORA-00911:invadlid character的问题。

我的情况是这两个问题同时出现,以下是具体情况。

一、关于以汉字当别名出现ORA-00911:invadlid character的问题。

我第一次使用plsql时,对该软件还不懂就出现了此问题,我在网上看了很多帖子,解决办法引到了解决汉字显示为问号的问题上,以致于我搞了很久,都没有解决。

我的解决办法是:用双引号将汉字别名引住,英文双引号,例如:select a "啊" from b。将别名外加上英文的双引号即可。

二、关于查询结果中汉字显示为问号的问题

解决办法:

第一步:

在sql窗口中输入 select userenv('language')from dual,查看结果,我的结果显示的是AMERICAN_AMERICA.ZHS16GBK。这个意思是oracle服务器端字符集的编码是AMERICAN_AMERICA.ZHS16GBK这样的。在sql窗口中输入select * from V$NLS_PARAMETERS,查看本地字符集的编码,执行,会出现两列数据,看右边那列的第一、二、九行数据(有的是一、二、六行数据)依次拼接后和服务器端的数据对照,二者一样的话,说明二者的字符集编码方式一样,我的是一样的,但汉字显示的还是问号。所以我也进行了系统变量的添加。

第二步:

添加系统变量(不是用户变量),我们需要添加和服务器端字符集编码一样的变量,也就是说我们要添加的变量的值要和select userenv('language')from dual语句查出来的一样。即LANG=zh_CN.GBK 和 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 。为什么多了LANG=zh_CN.GBK这一句,是因为网上说本地端少了个什么东西,需要也添加这个系统变量,我也试过只添加NLS_LANG=AMERICAN_AMERICA.ZHS16GBK这一个系统变量,没用,还是汉字变成问号。我试了网上说的很多关于系统变量的操作,但都不行。只有这个成功了。

第三步:

很重要的一点是——添加系统变量之后要重启电脑。有的人情况是添加系统变量之后重启plsql就可以了,我的电脑是需要重启一下电脑才可以正常使用。

问题原理:我也不清楚,但看网上的很多帖子说是:服务器端和本地电脑的编码不一样,导致中文显示的是问号。