当前位置:首页 » 操作系统 » oracle数据库乱码

oracle数据库乱码

发布时间: 2022-04-14 11:35:30

① Oracle数据出现中文乱码怎么解决

1. 服务器指定字符集与客户字符集不同,而与加载数据字符集一致。
解决方法:对于这种情况,只需要设置客户端字符集与服务器端字符集一致就可以了,具体操作如下:
* 查看当前字符集:
sql> select * from sys.props$
2 WHERE NAME=‘NLS_CHARACTERSET’;

NAME value$
NLS_CHARACTERSET ZHS16GBK

可以看出,现在服务器端Oracle数据库的字符集为‘ZHS16GBK’
* 根据服务器的字符集在客户端作相应的配置或者安装Oracle的客户端软件时指定:
如果还没安装客户端,那么在安装客户端时,指定与服务器相吻合的字符集即可;如果已经安装好了客户端,并且客户端为 sql*net 2.0 以下版本,进入Windows的系统目录,编辑oracle.ini文件,用US7ASCII替换原字符集,重新启动计算机,设置生效;否则,如果,客户端为 sql*net 2.0 以上版本,在Win98 下 运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE, 第三步选择 Oracle, 第四步选择 NLS_LANG, 键 入 与服 务 器 端 相 同 的 字 符 集
(本例为:HKEY_LOCAL_MACHINE/

SOFTWARE/ORACLE/NLS_LANG :AMERICAN _ AMERICA. ZHS16GBK)。
如果是UNIX客户端,则:
SQL> conn / as sysdba
Connected.
SQL> SQL> UPDATE sys.PROPS$ SET value$=‘SIMPLIFIED CHINESE’
2 WHERE NAME=‘NLS_LANGUAGE’;

2. 服务器指定字符集与客户字符集相同,与加载数据字符集不一致。
解决方法:强制加载数据字符集与服务器端字符集一致。要做到这一点,可以通过重新创建数据库,并选择与原卸出数据一致的字符集,然后IMP数据,这种情况仅仅适用于空库和具有同一种字符集的数据。
解决这类问题,也可以先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为foxbase 格式或access格式数据库,再用转换工具转入到不同字符集的Oracle数据库中,这样就避免了Oracle字符集的困扰。目前数据库格式转换的工具很多,像power builder5.0以上版本提供的pipeline及Microsoft Access数据库提供的数据导入/导出功能等。

3. 服务器指定字符集与客户字符集不同,与输入数据字符集不一致。
对于这种情况,目前为止都还没有太好的解决方法。
通过上面的了解,我们知道,导致在后期使用数据库时出现种种关于字符集的问题,多半是由于在数据库设计、安装之初没有很好地考虑到以后的需要,所以,我们完全可以通过在服务器上和客户端使用相同的字符集来避免由此类问题引出的麻烦
怎样修改查看Oracle字符集
a.数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。

b.客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,

表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

c.会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
实际情况
我用select * from nls_database_parameters
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM

PARAMETER VALUE
------------------------------ ------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
说明我在创建数据库时指定的字符集是ZHS16GBK,我用
update sys.props$ set value$='AL32UTF8' where name='NLS_CHARACTERSET';
修改了字符集,但插入中文时仍然有问题,这或许就如上面资料所说的通过修改SYS.PROPS$来修改主要是对应客户端的显示,与存储无关,
所以仍旧是乱码。
然后我重新创建了个数据库,指定字符集为AL32UTF8,插入中文就没问题了。
可见我们如果要在数据库中显示中文,在创建数据库时一定哟指定好所用的字符集。

② oracle乱码问题

你可以进行下编码转换啊
ORACLE默认的好象是UTF-8,你转换成GBK就可以了
在J2EE里可以使用过滤器,在PHP里我就不太清楚了
我想也应该有那一类的东东吧~

③ plsql连接oracle数据库查询汉子显示乱码

  • 打开PLSQL

④ oracle数据库表中某个字段已存在汉字乱码,怎样查找出这些乱码数据,

查询数据库表某字段含“乱码”的数据的一个方法
说明:
在某些情况下,由于字符集不兼容等问题,数据库中的记录可能存在“乱码”,本文就是介绍一个SQL语句把乱码的记录找到。
什么是“乱码”
这是首先需要明确的,其实如果数据库记录了“半个汉字”实际他只会记录一个“?”(Oracle),如果记录的乱码恰好变成另外一个“汉字”和残余字符,那这个新的“汉字”是不能用下面的方法找出来的。

适用范围
查找记录中是否含有ascii码(特别是“?”)的方式找到“乱码”的记录。
SQL模板

Select
*
from

Table_A
t
Where

instr(Name,chr(1))>0
or
instr(Name,chr(2))>0
or
instr(Name,chr(3))>0
or
instr(Name,chr(4))>0
or
instr(Name,chr(5))>0
or
instr(Name,chr(6))>0
or
instr(Name,chr(7))>0
or
instr(Name,chr(8))>0
or
instr(Name,chr(9))>0
or
instr(Name,chr(10))>0
or
instr(Name,chr(11))>0
or
instr(Name,chr(12))>0
or
instr(Name,chr(13))>0
or
instr(Name,chr(14))>0
or
instr(Name,chr(15))>0
or
instr(Name,chr(16))>0
or
instr(Name,chr(17))>0
or
instr(Name,chr(18))>0
or
instr(Name,chr(19))>0
or
instr(Name,chr(20))>0
or
instr(Name,chr(21))>0
or
instr(Name,chr(22))>0
or
instr(Name,chr(23))>0
or
instr(Name,chr(24))>0
or
instr(Name,chr(25))>0
or
instr(Name,chr(26))>0
or
instr(Name,chr(27))>0
or
instr(Name,chr(28))>0
or
instr(Name,chr(29))>0
or
instr(Name,chr(30))>0
or
instr(Name,chr(31))>0
or
instr(Name,chr(32))>0
or
instr(Name,chr(33))>0
or
instr(Name,chr(34))>0
or
instr(Name,chr(35))>0
or
instr(Name,chr(36))>0
or
instr(Name,chr(37))>0
or
instr(Name,chr(38))>0
or
instr(Name,chr(39))>0
or
instr(Name,chr(40))>0
or
instr(Name,chr(41))>0
or
instr(Name,chr(42))>0
or
instr(Name,chr(43))>0
or
instr(Name,chr(44))>0
or
instr(Name,chr(45))>0
or
instr(Name,chr(46))>0
or
instr(Name,chr(47))>0
or
instr(Name,chr(48))>0
or
instr(Name,chr(49))>0
or
instr(Name,chr(50))>0
or
instr(Name,chr(51))>0
or
instr(Name,chr(52))>0
or
instr(Name,chr(53))>0
or
instr(Name,chr(54))>0
or
instr(Name,chr(55))>0
or
instr(Name,chr(56))>0
or
instr(Name,chr(57))>0
or
instr(Name,chr(58))>0
or
instr(Name,chr(59))>0
or
instr(Name,chr(60))>0
or
instr(Name,chr(61))>0
or
instr(Name,chr(62))>0
or
instr(Name,chr(63))>0
or
instr(Name,chr(64))>0
or
instr(Name,chr(65))>0
or
instr(Name,chr(66))>0
or
instr(Name,chr(67))>0
or
instr(Name,chr(68))>0
or
instr(Name,chr(69))>0
or
instr(Name,chr(70))>0
or
instr(Name,chr(71))>0
or
instr(Name,chr(72))>0
or
instr(Name,chr(73))>0
or
instr(Name,chr(74))>0
or
instr(Name,chr(75))>0
or
instr(Name,chr(76))>0
or
instr(Name,chr(77))>0
or
instr(Name,chr(78))>0
or
instr(Name,chr(79))>0
or
instr(Name,chr(80))>0
or
instr(Name,chr(81))>0
or
instr(Name,chr(82))>0
or
instr(Name,chr(83))>0
or
instr(Name,chr(84))>0
or
instr(Name,chr(85))>0
or
instr(Name,chr(86))>0
or
instr(Name,chr(87))>0
or
instr(Name,chr(88))>0
or
instr(Name,chr(89))>0
or
instr(Name,chr(90))>0
or
instr(Name,chr(91))>0
or
instr(Name,chr(92))>0
or
instr(Name,chr(93))>0
or
instr(Name,chr(94))>0
or
instr(Name,chr(95))>0
or
instr(Name,chr(96))>0
or
instr(Name,chr(97))>0
or
instr(Name,chr(98))>0
or
instr(Name,chr(99))>0
or
instr(Name,chr(100))>0
or
instr(Name,chr(101))>0
or
instr(Name,chr(102))>0
or
instr(Name,chr(103))>0
or
instr(Name,chr(104))>0
or
instr(Name,chr(105))>0
or
instr(Name,chr(106))>0
or
instr(Name,chr(107))>0
or
instr(Name,chr(108))>0
or
instr(Name,chr(109))>0
or
instr(Name,chr(110))>0
or
instr(Name,chr(111))>0
or
instr(Name,chr(112))>0
or
instr(Name,chr(113))>0
or
instr(Name,chr(114))>0
or
instr(Name,chr(115))>0
or
instr(Name,chr(116))>0
or
instr(Name,chr(117))>0
or
instr(Name,chr(118))>0
or
instr(Name,chr(119))>0
or
instr(Name,chr(120))>0
or
instr(Name,chr(121))>0
or
instr(Name,chr(122))>0
or
instr(Name,chr(123))>0
or
instr(Name,chr(124))>0
or
instr(Name,chr(125))>0
or
instr(Name,chr(126))>0
or
instr(Name,chr(127))>0

⑤ 如何解决oracle数据库因字符集出现的乱码问题

oracle数据库查询时出现乱码,很可能是该数据库的字符集设定不支持中文,但是表中数据含有中文,所以变为乱码。
如果是字符集原因,解决方法如下:
1、shutdown immediate; 关闭数据库
2、startup mount; 开启数据库至挂载模式(只挂实例,不启动数据库)
3、alter system enable restricted session;开启会话限制
4、alter system set aq_tm_processes=0;修改系统参数
5、alter system set job_queue_processes=0;修改系统参数
6、alter database open;启动数据库为open
7、alter database national character set internal_user (zhs16gbk);修改字符集
8、alter system disable restricted session;关闭会话限制
括号内可填写字符集类型,zhs16gbk、AL32UTF8等字符集都支持中文。

⑥ idea中查询Oracle数据库数据中文乱码,但是在plsql中查询正常(Oracle字符集是US7ASCII)

oracle数据库查询时出现乱码,很可能是该数据库的字符集设定不支持中文,但是表中数据含有中文,所以变为乱码。
如果是字符集原因,解决方法如下:
1、shutdown immediate; 关闭数据库
2、startup mount; 开启数据库至挂载模式(只挂实例,不启动数据库)
3、alter system enable restricted session;开启会话限制
4、alter system set aq_tm_processes=0;修改系统参数
5、alter system set job_queue_processes=0;修改系统参数
6、alter database open;启动数据库为open
7、alter database national character set internal_user (zhs16gbk);修改字符集
8、alter system disable restricted session;关闭会话限制
括号内可填写字符集类型,zhs16gbk、AL32UTF8等字符集都支持中文。

⑦ oracle数据库打开本地文件输出乱码怎么解决

一般来说,你这情况是因为数据库服务器和客户端字符集不匹配,执行sqlplus的机器就是客户端,服务器和客户端也可能是一台机器,执行sqlplus之前要先设置客户端的字符集,在linux上:export NLS_LANG=.......
在windows上set NLS_LANG
查询数据库字符集:select property_value from database_properties where property_name like 'NLS_CHAR%';
比如查询结果是:ZHS16GBK
那你在sqlplus之前要设置:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
然后再登录sqlplus用spool生成数据

⑧ oracle 乱码 如何解决

1、对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
2、去掉注释符#,同时将其修改为
SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
3、对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为
SQLPLUS_SYSTEMROOT=d:\\WINNT。
对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
4、修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。
问题: 使用Oracle Instant Client 出现 ORA-12705: Cannot access NLS data files or invalid environment specified 错误。
如果是Windows平台,注册表里 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 查找键 NLS_LANG,这个键由Oracle标准客户端安装创建, 值是 NA 。这个导致了 ORA-12705错误。解决方法就是改名 NLS_LANG。
Linux下 如果环境变量 NLS_LANG 值是NA 会引起 ORA-12705 错误,解决方法是删除这个变量
unset NLS_LANG

热点内容
福建社保银行卡初始密码是多少 发布:2024-11-15 11:47:40 浏览:911
游戏多开用什么配置 发布:2024-11-15 11:46:51 浏览:729
管理java版本 发布:2024-11-15 11:44:03 浏览:629
ndk编译的程序如何执行 发布:2024-11-15 11:43:18 浏览:626
轻应用服务器适合搭建网站吗 发布:2024-11-15 11:36:08 浏览:246
c语言的百分号 发布:2024-11-15 11:34:24 浏览:31
一加五安卓8什么时候推送 发布:2024-11-15 11:19:40 浏览:854
暗影骑士擎有哪些配置 发布:2024-11-15 11:13:46 浏览:598
方舟主机专用服务器是什么意思 发布:2024-11-15 11:12:23 浏览:8
创维最早的服务器是什么 发布:2024-11-15 11:11:35 浏览:864