菜鸟求教:Oracle8i中的中英文字符集问题

时间:2023-02-05 06:39:08
insert into table1(SchoolName) values('浙江大学');
在sqlplus中,用上面这条语句将"浙江大学"字符串输入数据库,然后select,得到的是乱码。
管理者说是因为安装的Oracle8.1.6采用的是英文字符集,要将中文进行转换后才能存进去。
请问高手应该如何转换?又如何将数据中的字符串转换成中文然后输出?

9 个解决方案

#1


修改注册表中HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中NLS_LANG为:
AMERICAN_AMERICA.WE8ISO8859P1,即可。

#2


BlueskyWide(谈趣者)兄说的是一个方面
   修改注册表中HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中NLS_LANG为: 
   AMERICAN_AMERICA.WE8ISO8859P1,
   
   2。还要以SYSTEM/MANAGER帐号登陆,修改PROPS$系统表的数据,因为ORACLE都是根据
      这个表的VALUE$字段的值来判断内部字符级的,在SQLPLUS下发
      UPDATE SYS.PROPS$ SET VALUE$='WE8ISO8859P1' WHERE NAME LIKE 'NLS_CHAR%';
   重新启动即可。
   如还存不了中文,再来探讨,是可以解决的

#3


谢谢两位的指点,我有些情况没有说清楚,还请帮忙看一下:

服务器上的Oracle8.1.6是英文字符集,但是服务器上的Oracle是绝对不能改动的——或者说:我是无法接触到服务器的

而我在客户端用delphi开发,想将中文的数据存入服务器上的Oracle服务器中。客户端装的是Oracle8.1.6,不过是中文字符集。
请问有解决的办法吗?
谢谢

#4


在服务器在刚才的注册表目录下
和客户端的刚才的注册表目录下
把nls_lang改为相同就可以吧!
我这里两面边都是SIMPLIFIED CHINESE_CHINA.ZHS16GBK

#5


都改为相同的话,那只能将我这边客户端改为英文字符集了。可是这样存入的中文字符不还是乱码吗?

#6


顶一下,看看有没有高手有好办法?

#7


客户端用中文显示操作,服务器端用英文存贮,应该没问题吧。

#8


对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
对于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 
修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。

#9


GOOD!

#1


修改注册表中HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中NLS_LANG为:
AMERICAN_AMERICA.WE8ISO8859P1,即可。

#2


BlueskyWide(谈趣者)兄说的是一个方面
   修改注册表中HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中NLS_LANG为: 
   AMERICAN_AMERICA.WE8ISO8859P1,
   
   2。还要以SYSTEM/MANAGER帐号登陆,修改PROPS$系统表的数据,因为ORACLE都是根据
      这个表的VALUE$字段的值来判断内部字符级的,在SQLPLUS下发
      UPDATE SYS.PROPS$ SET VALUE$='WE8ISO8859P1' WHERE NAME LIKE 'NLS_CHAR%';
   重新启动即可。
   如还存不了中文,再来探讨,是可以解决的

#3


谢谢两位的指点,我有些情况没有说清楚,还请帮忙看一下:

服务器上的Oracle8.1.6是英文字符集,但是服务器上的Oracle是绝对不能改动的——或者说:我是无法接触到服务器的

而我在客户端用delphi开发,想将中文的数据存入服务器上的Oracle服务器中。客户端装的是Oracle8.1.6,不过是中文字符集。
请问有解决的办法吗?
谢谢

#4


在服务器在刚才的注册表目录下
和客户端的刚才的注册表目录下
把nls_lang改为相同就可以吧!
我这里两面边都是SIMPLIFIED CHINESE_CHINA.ZHS16GBK

#5


都改为相同的话,那只能将我这边客户端改为英文字符集了。可是这样存入的中文字符不还是乱码吗?

#6


顶一下,看看有没有高手有好办法?

#7


客户端用中文显示操作,服务器端用英文存贮,应该没问题吧。

#8


对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
对于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 
修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。

#9


GOOD!