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,插入中文就没问题了。 可见我们如果要在数据库中显示中文,在创建数据库时一定哟指定好所用的字符集。