当前位置:首页 >> 计算机软件及应用 >>

PLSQL往Oracle数据库插入中文后变为问号 和 启动PLSQL时提示NLS


PL/SQL 向 Oracle 数据库输入中文后变为问号 和 启动 PL/SQL 时提示 NLS_LANG 在客户端不能确定的解决办法

工作需要, 最近在 VM 虚拟机里安装了 Redhat Linux 系统, 并在 Redhat 里安装了 Oracle10.5, 接着在本地 Win7 系统里, 通过安装 Oracle Instant Client 客户端和

PL/SQL Developer 工具, 来访问 Oracle 进行 SQL 操作。 但一直遇到一个很奇怪的问题, 通过 PL/SQL Developer 工具, 不管是通过 Insert into 插入的,或者通过菜单:工具-ODBC 导入器导入的数据,只要包含中文的值,查询时都显示其变为“?”问号了(图 1) 。

图 1

上网了解到这跟字符集有关,Oracle安装和导入数据时,需要Oracle的Server服务器、Client客户端以及安装环境三者的字符集编码一致,否则 就会出现乱码问题。如下图2所示,Oracle数据库的区域语言、字符集和安装环境的区域语言、字符集设置不一致,导致Oracle中文提示变为乱码:

图 2

通过语句: Select * from V$NLS_PARAMETERS where PARAMETER='NLS_CHARACTERSET'; Select USERENV('LANGUAGE') from DUAL; 可以查询到 Oracle 服务器正在使用是什么字符集;

通过查找注册表:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\里,NLS_LANG 的具体键值即可知道客户端使用的字符集(图 3) 。

图 3

一开始检查到 Oracle 服务端和客户端使用的字符集不一,于是将服务端的字符集改成 ZHS16GBK 以保持跟客户端的一致,但输入中文以后测 试发现问题还是没解决。 继续上网寻找解决办法,了解到 PL/SQL Developer 可以设置使用的字符集,在菜单:工具-首选项里,可能因为版本问题找了一遍没发现,倒 是发现在菜单:首选项-Oracle 里有一项:检查客户及与服务器字符集是否匹配(图 4) ,马上将其勾选,确定保存后退出 PL/SQL Developer,再重 新打开。 这时又提示: “NLS_LANG 在客户端不能确定,字符集转变将造成不可预期的后果” (图 5) 。

图 4

图 5

根据网上提示,打 PL/SQL Developer 工具的:帮助-支持信息-信息 选项卡里进行检查,在“Character Sets”下面,有一项是: “NLS_LANG” , 其值为空(图 6) ,但上面已经检查过注册表 NLS_LANG 项的键值是正确的,这说明 PL/SQL Developer 工具没加载到注册表的信息。

图 6

看来得添加环境变量了, 如下图 7 所示, 在环境变量-系统变量里, 新增变量 NLS_LANG, 将上面查到的 Oracle 服务端在使用的字符集 (SIMPLIFIED CHINESE_CHINA.ZHS16GBK)填进去即可,然后退出 PL/SQL Developer 再重新打开登陆进 Oracle。

图 7

使用 echo 命令能看到环境变量设置成功(图 8) ,加载成功的结果也可以在 PL/SQL Developer 的帮助中看到(图 9) :

图 8

图 9

重新向 Oracle 数据库中插入中文再查询,应该不会再变为问号了! 此时,如果在本地通过 PL/SQL Developer 操作远程数据库的话,提示信息应该是中文的(图 10) :

图 10

如果提示是英文的话,就得看看远程数据库的语言区域、或者操作系统的 NLS_LANG 变量是什么的了,比如下图 11 这种情况表示使用的是 American 美国区域的语言,所以提示当然是英文的啦!

图 11

关于NLS_LANG,涉及到了这几个表:V$NLS_PARAMETERS(使用的字符集,表示的就是本地NLS_LANG了,图12),V$NLS_VALID_VALUES(可 用的字符集),NLS_DATABASE_PARAMETERS,NLS_INSTANCE_PARAMETERS。

图 12


相关文章:
PLSQL developer 连接不上64位Oracle 的解决方法
PLSQL developer 连接不上64位Oracle 的解决方法_计算机软件及应用_IT/计算机_...值,那么连接上数据库后,你看到的所 有中文的内容将会是乱码,都是一堆问号。 ...
PLSQL developer 连接不上64位Oracle 的解决方法
PLSQL developer 连接不上64位Oracle 的解决方法_互联网_IT/计算机_专业资料。...以下值,那么连接上数据库后,你看到的所有中文的内容将会是乱码,都是一堆问号。...
plsql中文显示问号处理办法
plsql中文显示问号处理办法_计算机软件及应用_IT/计算机_专业资料。plsql中文显示问号处理办法 SELECT * FROM V$NLS_PARAMETERS Regedit 进入注册表,依次单击 HKEY_...
导入dmp文件到本地后,存储过程里中文显示问号乱
导入dmp文件到本地后,存储过程里中文显示问号乱_计算机...UE打开看了下exp版本号,V09.02,随后上oracle官网...nls_lang,然后数据库将5678再转换 为1234给plsql ...
oracle数据库中插入特殊符号'&'
oracle 数据库插入特殊符号'&' 在 plsql 里边执行:update userinfo set pageurl='myjsp?page=1&pagesize=10' where id='test'这条 sql 语句往数据库的 ...
jeecg 01开发环境搭建
安装 Oracle 打开下载的 Oracle11g 安装文件,运行“...8.2. PLSQL_Developer 中文乱码处理 当你向数据库...中添加中文的时候,表格中的中文都变成了乱码或者问号...
64位操作系统使用plsql_developer
8. 后续在 oracle 中增加其他数据库连接时,需要将 C:\oracle\product\10.2....确实,如果查询,表中的中文注释就是问号。 怎么没加载呢? 我系统注册表有 NLS...
PLSQL中文乱码显示符号解决方案
PLSQL,查询表中数据时,出现乱码现象(不识别中文, 输出的中文标题显示成问号???...解决方案? 右键→计算机→属性→高级系统设置→环境变量→新增变量 变量名:NLS_...
更多相关标签: