在数据库服务器字符集为AL32UTF8,我们来思考并处理一下Windows XP环境下的Toad工具显示字符为乱码的问题。
1.鉴于《【字符集】“客户终端字符集”、“NLS_LANG”环境变量以及“数据库字符集”》http://space.itpub.net/519536/viewspace-615345提到的“Toad同学”显示不稳定的现象,这里给出一个处理方法。
2.先列一下上面文章中得到的几个结论:
1)如果有可能,尽量保证客户端编码(Windows XP的cmd工具可以使用chcp命令来确认)、NLS_LANG参数和数据库字符集这三个内容一致,这样设置,无论是从性能上,还是从防止编码转换上都是最佳的;
2)如果目的是支持中文,数据库Server端的字符集应该尽量选择ZHS16GBK或AL32UTF8字符集,这样可以减少因不当的“转码”导致的字符乱码故障;
3)(推荐)可已将NLS_LANG参数与操作终端字符编码一致,这样可以保证数据库能正确获得应用终端使用的编码,这时会发生“编码转换”,但是,这样就可以保证正确转码,可以防止错误的编码存入数据库;
4)(不推荐)也可以将NLS_LANG参数与数据库服务器端的编码一致,这样,客户端无论是发送到服务器端还是从服务器接收数据都不会“转码”,这样能保证客户端对字符的显示效果,但是,一定要小心,这时数据库服务器上存放的字符编码很可能是错误的。
5)PL/SQL Developer工具在AL32UTF8字符集下貌似可以保证数据效果,但是“Toad同学”貌似不太“稳定”。
3.如果您仔细探究一下,乱码的成因很单纯:“乱码”来自于“转码”!
4.因为Windows XP系统的字符集是936,也就是中文字符集GBK,这个字符集在Oracle中对应的就是ZHS16GBK,鉴于上面提到的结论“2)”和结论“3)”,所以就有了这个所谓的“折中式”处理方法:将Windows XP注册表中的NLS_LANG参数修改为AMERICAN_AMERICA.ZHS16GBK,以便保证与Windows XP这个操作终端的字符集一致。这样,在每次存取数据的时候都会发生转码,目的是在数据库Server端不会存入错误的编码。请参考下面的确认和修改方法。
1)Windows XP字符集确认方法:
C:\>chcp
Active code page: 936
代码页936就是中文字符集GBK,可以参考msdn的资料《Windows Codepage 936》
http://www.microsoft.com/globaldev/reference/dbcs/936.htm
2)Windows XP环境Oracle的NLS_LANG参数修改流程:
Windows键+R进入到Run对话框,输入“regedit”进入到注册表
导航:HKEY_LOCAL_MACHINE --> SOFTWARE --> ORACLE --> KEY_OraDb_home1
右侧找到NLS_LANG参数,修改为AMERICAN_AMERICA.ZHS16GBK。如果没有这个参数,请自行创建。
5.这样修改后,还带了了一个副作用(是“副作用”,不是“负作用”,意为另外一个好的结果):
在修改NLS_LANG为AMERICAN_AMERICA.ZHS16GBK之前,该参数为AMERICAN_AMERICA.AL32UTF8,是与数据库Server端保持一致的,虽然这样设置不会发生转码的现象,但是在Windows的cmd环境下会出现“一些汉字”(大部分可以)汉字无法录入的问题,现象如下:
C:\>sqlplus sec/sec@DB_AL32UTF8
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Sep 23 10:57:21 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sec@ora10g> drop table t purge;
Table dropped.
sec@ora10g> create table t (x varchar2(10 char));
Table created.
sec@ora10g> insert into t values ('侯');
ERROR:
ORA-01756: quoted string not properly terminated
这只是一个影响,另外一个著名的影响就是加中文comments的时候也报这样的错误
sec@ora10g> comment on table t is '侯';
ERROR:
ORA-01756: quoted string not properly terminated
OK,问题现象描述清楚了,下面我们修改NLS_LANG参数为AMERICAN_AMERICA.ZHS16GBK,也就是保持和XP系统的字符集一致。
注意:需要重新进入以下SQLPLUS环境
C:\>sqlplus sec/sec@DB_AL32UTF8
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Sep 23 11:05:07 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sec@ora10g> insert into t values ('侯');
1 row created.
sec@ora10g> comment on table t is '侯';
Comment created.
sec@ora10g> col DUMP(X) for a30
sec@ora10g> select x,dump(x) from t;
X DUMP(X)
-------------------- ------------------------------
侯 Typ=1 Len=3: 228,190,175
效果非常的明显吧,dump后的结果也很清楚的表名,“侯”这个字已经被“转码”到AL32UTF8格式的了。
6.小结
通过这个实验我们妥善处理了两个实际问题,如果您没有遇到过,恭喜您,您很幸运。
1)Toad显示字符乱码问题
2)Windows XP环境或Toad环境下无法插入“某些汉字”和comments的问题
分享到:
相关推荐
### TOAD导出EXCEL文件时中文乱码解决办法 #### 背景介绍 在数据库管理和开发过程中,经常需要将查询结果导出为Excel文件以便进行进一步的数据分析或分享给其他团队成员。TOAD是一款非常流行的数据库管理工具,...
本文将详细阐述如何解决Toad在导出到Excel时出现的中文乱码问题。 首先,一个简单且通常有效的解决方案是改变导出格式为文本文件。Toad允许用户将数据导出为多种格式,包括CSV(逗号分隔值)或TXT(纯文本)。这两...
本文将深入探讨这一问题,并提供一套详细的解决方案,帮助读者理解和解决因字符集不匹配而导致的PL/SQL中文乱码现象。 ### PL/SQL中文乱码原因分析 PL/SQL中文乱码的根本原因在于数据库与应用程序(如PL/SQL ...
TOAD 中有时会出现中文乱码问题,可以通过设置系统环境变量 NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 来解决这个问题。 技巧 3:自动提示功能 TOAD 中提供了自动提示功能,类似于 PL/SQL Developer。可以输入表名...
2. **解决中文乱码问题**:如果遇到Toad显示中文乱码,可能是因为数据库服务器的NLS_LANG设置不正确。在Windows系统的环境变量中添加`NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P13`,以适应中文字符集。 3. **自动提示...
2. **解决中文乱码问题**:若数据库服务器的NLS_LANG设置为`AMERICAN_AMERICA.WE8ISO8859P1`,可能导致中文显示乱码。为解决此问题,可以在系统环境变量中添加`NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P13`。 3. **...
2. **解决中文乱码问题**:为了解决Toad中的中文乱码问题,可以在系统环境变量中添加`NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1`,确保正确显示中文字符。 3. **智能提示功能**:在输入表名或字段名时,输入前几个...
在Linux环境下向MySQL数据库插入数据时遇到中文乱码问题,通常是由于字符编码不匹配导致的。MySQL数据库系统默认可能使用的是UTF-8编码,而你的应用程序或者数据源可能使用了不同的编码方式,如GBK等。这就会导致在...
该压缩文件中加入了查看存储过程时,中文注释为乱码的解决办法(通过修改DBVisualizer的字体)。 该工具简介如下: DbVisualizer是一个完全基于JDBC的跨平台数据库管理工具,内置SQL语句编辑器(支持语法高亮),...
- 字符集修改:Oracle10g提供了内部指令修改字符集,解决了“军卫一号”系统存在的中文字符集问题。 4. 升级步骤 升级过程通常包括以下几个关键步骤: - 评估当前环境,确保所有应用程序和组件与Oracle10g兼容。 - ...
3. **设置环境变量**:添加系统环境变量,包括`NLS_LANG`以解决中文字符乱码问题,设置为`SIMPLIFIED CHINESE_CHINA.ZHS16GBK`;`TNS_ADMIN`指向Oracle客户端的安装目录;`Path`中包含`C:\instantclient_11_1`,使得...
- 如果连接后出现字符乱码或者中文显示不正常的问题,可能是因为客户端与服务器的语言环境设置不一致。 - 可以通过执行如下SQL语句查询当前客户端的语言环境设置: ```sql SELECT userenv('language') FROM dual...
在示例中,设置为`SIMPLIFIED CHINESE_CHINA.ZHS16GBK`,这有助于处理中文字符,防止在使用Toad等工具进行查询时出现乱码问题。 2. **TNS_ADMIN**: 指定Oracle网络服务配置文件(tnsnames.ora和sqlnet.ora)的位置...