pl/sql粘贴进去的汉字全是问号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pl/sql粘贴进去的汉字全是问号相关的知识,希望对你有一定的参考价值。
在查询的时候是汉字,我粘贴其他脚本到PL/SQL时,显示的全是“???????????”,在别人电脑上用相同的文本,显示正常,不知道是什么原因,重新安装了pl/sql还是不行,请大家帮忙,谢谢。
向高手请教了,原来切换下输入法到中文,我再粘贴就可以了,唉,PL/SQL还有这“功能”你真是太牛X啦。
(1)查看服务器端字符集
通过客户端或服务器端的sql*plus登录oracle的一个合法用户,执行下列
sql语句:
sql > select * from v$nls_parameters
parameter value
nls_language american
nls_territory america
…. ….
nls_characterset us7ascii
nls_sort binary
nls_nchar_characterset us7ascii
从上述列表信息中可看出服务器端oracle数据库的字符集为"us7ascii"。
(2)按照服务器端字符集对客户端进行配置
配置方法有两种:
安装oracle的客户端软件时指定
在安装oracle的客户端产品软件时,选择与oracle服务端一致的字符集(本例为us7ascii)即可。
修改注册信息的方法
根据oracle 客户端所选sql*net 的版本分为下列两种情况:
a. 客户端为 sql*net 2.0 以下版本
进入windows的系统目录,编辑oracle.ini文件,用us7ascii替换原字符
集,重新启动计算机,设置生效。
b. 客户端为 sql*net 2.0 以上版本
在windows下 运 行regedit,第一步选hkey_local_machine,第二步选择software, 第三步选择 oracle, 第四步选择 nls_lang, 键 入 与服 务 器端 相 同 的 字 符集(本例为:american_american.us7ascii)。
2.2 强制加载数据字符集与服务器端字符集一致
假设要加载数据从原oracle数据库卸出时的字符集为us7ascii,当前oracle服务器字符集为we8iso8859p1。
下面提供三种解决方法:
(1) 服务器端重新安装oracle
在重新安装oracle 时选择与原卸出数据一致的字符集(本例为us7ascii)。
加载原卸出的数据。
这种情况仅仅使用于空库和具有同一种字符集的数据。
(2)强行修改服务器端oracle当前字符集
在用imp命令加载数据前,先在客户端用sql*plus登录system dba用户,执行下列sql语句进行当前oracle数据库字符集修改:
sql > create database character set us7ascii
* create database character set us7ascii
error at line 1:
ora-01031: insufficient privileges
你会发现语句执行过程中,出现上述错误提示信息,此时不用理会,实际上oracle数据库的字符集已被强行修改为us7ascii,接着用imp命令装载数据。等数据装载完成以后,shutdown 数据库,再startup 数据库,用合法用户登录oracle数据库,在sql>命令提示符下,运行select * from v$nls_parameters,可以看到oracle数据库字符集已复原,这时再查看有汉字字符数据的表时,汉字已能被正确显示。
(3)利用数据格式转储,避开字符集限制
这种方法主要用于加载外来oracle数据库的不同字符集数据。其方法如下:
先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为foxbase 格式或access格式数据库,再用转换工具转入到不同字符集的oracle数据库中,这样就避免了oracle字符集的困扰。目前数据库格式转换的工具很多,象power builder5.0以上版本提供的pipeline,microsoft access数据库提供的数据导入/导出功能等。转换方法参见有关资料说明。.
2.3匹配字符集替换汉字
对于1.3提到的情况,没有很好的办法,只能先把客户端与服务器端字符集匹配一致后,根据原输入汉字的特征码替换汉字字符部分。
以上为引用部分,下面为我的一些具体操作后的结果。
目前在安装新的oracle 9.2.0.1时,估计是同事按照默认字符集进行了安装,导致与旧的数据库字符集不符,可我修改完注册表中所有关于字符集的相关键值后却仍然是乱码,在 sql*plus中用“select * from v$nls_parameters”查询出来的结果是NLS_CHARACTERSET的值仍为ZHS16GBK。经过网上检索,找到了一些解决办法,并最终得到解决。上面引用的部分是其中写得比较全面的。
具体的解决过程:
1、上述引用部分中“三种解决办法”第二种办法,初步测试无效,不知是不是数据库版本变了的缘故?没有时间仔细钻研了。
2、根据网上得到的另外一个解决办法:
1)、用SYSTEM登录数据库。
2)、执行 UPDATE SYS.PROPS$ SET VALUE$=\'WE8ISO8859P1\' WHERE NAME LIKE \'NLS_CHAR%\'; 语句。
3)、修改注册表,NLS_LANG的值为AMERICAN_AMERICA.WE8ISO8859P1
4)、重新启动数据库。
经测试,如果用system登录,那么第二条语句会因为权限问题无法执行。
3、根据无意中看到的一条语句,这个问题得到完美解决。即登录时用“/as sysdba”作为用户名登录(注意,该方法只能在数据库的服务端使用)。只需在sql*plus登录界面中的用户名那栏里填入即可或者是用其它用户正常登录,然后再输入语句“conn /as sysdba”也可。登录完成后再执行UPDATE SYS.PROPS$ SET VALUE$=\'WE8ISO8859P1\' WHERE NAME LIKE \'NLS_CHAR%\'; 导入数据,嘿嘿,搞定了,乱码终于消失了。不过,美中不足的是用oracle自带的管理工具查询数据表时仍然是乱码,估计是客户端的配置文件还有什么地方需要改动,不过,对我来说影响不大,程序执行后数据显示正常。
对了,补充一下,引用部分中“三种解决办法”第二种办法报错也是权限错误,不知道用"/as sysdba"登录能否修改成功,懒得试了。有兴趣的朋友可以试试!呵呵 参考技术A 设置系统环境变量即可 参考技术B 字符编码集的问题 参考技术C 字符集的问题,我以前遇到过这样的问题,但是我重装系统了 参考技术D 应该是编码问题
PLSQL中table表中的汉字显示问号,装了汉化包之后还是问号,不知道怎么解决
装的oracle客户端连接oracle数据库
你好,建议新建一个变量名NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK具体操作步骤:
我的电脑-右键-属性-高级-环境变量-系统变量-新建变量
变量名:NLS_LANG
变量值:AMERICAN_AMERICA.UTF8
如果想转换为UTF8字符集,可以赋予“NLS_LANG”为 “AMERICAN_AMERICA.UTF8”,然后重新启动 pl/sql developer。 参考技术A Tools->Preferences->Font->Grid->修改里面的字体为黑体(或其他汉字库),文字选简体中文。追问
不是这个原因,还是不行
追答你的系统是什么环境?
追问xp之前的win7也是这样,是不是要改系统的语言设置,这个是中文呀
以上是关于pl/sql粘贴进去的汉字全是问号的主要内容,如果未能解决你的问题,请参考以下文章