以下的文章主要描述的是Oracle字符集问题,其中包括数据库字符集, 客户端字符集,终端字符集,的相关内容的介绍。

咱们都知道Oracle字符集问题,能够分红三类: 即,数据库字符集, sqlplus的字符集(客户端字符集),以及 终端程序的字符集 (非Oracle的),以下的文章便是对Oracle字符集三种类型的首要描绘。

Oracle字符集的三大类型(oracle字符集有哪些)  Oracle字符集 第1张

1、数据库字符集

数据库字符集是一切字符问题的中心,只要数据库自身的字符集正确了,客户端的字符集才或许正确。这儿只的客户端包含sqlplus以及咱们自己读数据库的使用程序。

在定位问题时,咱们需求先看看数据库当时是什么Oracle字符集。

1)查询数据库字符集

  1. select*fromnls_database_parameters

其间 nls_language表明了显现方法, 便是sqlplus的程序的显现字体,有SIMPLIFIED CHINESE,American america

其间 nls_characterset是字符集设定, 常用的一些Oracle字符集有UTF8,US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK, AL32UTF8

2)修正数据库字符集

当发现数据库字符集不正确时,如咱们希望时GBK的,而数据库当时是其他的,然后引起中文乱码。这时咱们需求修正数据库字符集。过程如下:

  1. $sqlplus/nolog
  2. SQL>conn/assysdba;

若此刻数据库服务器已发动,则先履行SHUTDOWN IMMEDIATE指令封闭数据库服务器,然后履行以下指令:

  1. SQL>STARTUPMOUNT;
  2. SQL>ALTERSYSTEMENABLERESTRICTEDSESSION;
  3. SQL>ALTERSYSTEMSETJOB_QUEUE_PROCESSES=0;
  4. SQL>ALTERSYSTEMSETAQ_TM_PROCESSES=0;
  5. SQL>ALTERDATABASEOPEN;
  6. SQL>ALTERDATABASECHARACTERSETZHS16GBK;
  7. SQL>ALTERDATABASEnationalCHARACTERSETZHS16GBK;
  8. SQL>SHUTDOWNIMMEDIATE;
  9. SQL>STARTUP

2 客户端字符集

假如服务器端的Oracle字符集是正确的,而在客户端下,如sqlplus依然不能正确显现中文,这一般是因为服务器端的字符集设定与客户端的字符集设定不同形成的。只要将两者修正共同就能够解决问题。

1)查询客户端字符集

  1. elect*fromnls_instance_parameters

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

表明客户端的字符集的设置,或许是参数文件,环境变量或许是注册表

  1. selectuserenv('language')fromdual;

会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表明会话自己的设置,或许是会话的环境变量或许是alter session完结,假如会话没有特别的设置,将与nls_instance_parameters共同。

客户端的字符集要求与服务器共同,才干正确显现数据库的非Ascii字符。假如多个设置存在的时分,alter session>环境变量>注册表>参数文件

字符集要求共同,可是言语设置却能够不同,言语设置主张用英文。如Oracle字符集是zhs16gbk,则nls_lang能够是American_America.zhs16gbk。 或许.zhs16gbk。留意zhs16gbk前面那个点是有必要的哦!!

2) 修正客户端字符集

Oracle 的sqlplus会去读取OS中环境变量下的nls_lang信息

NSL_LANG包含三个部分(言语_区域.字符集)便是V$NLS_PARAMETERS表中的NLS_LANGUAGE,NLS_TERRITORY,NLS_CHARACTERSET

例如能够在cmd中键入

  1. setnls_lang="Simplifiedchinese_china.utf8"
  2. setnls_lang="american_america.us7ascii"
  3. setnls_lang="american_america.zhs16gbk"
  4. setnls_lang="Simplifiedchinese_china.zhs16gbk"
  5. setnls_lang=".utf8"
  6. setnls_lang=".zhs16gbk"
  7. setnls_lang=".us7ascii"

unix下相似, 不过nls_lang要大写NLS_LANG, 在.profile或这.bash_profile(依据你用的shell)里更改NLS_LANG能够持久坚持环境变量值.

3、终端字符集

假如数据库字符集和sqlplus的字符集共同, 仍是不能正确显现了, 那很或许便是你的终端使用程序的Oracle字符集不支持了. 例如你用bash登陆sqlplus, 假如你的bash是个小字符集, 那么就不能正常显现了.linux修正bash的字符集, 能够先键入locale, 看有哪些环境变量, 再用export设置.

【修改引荐】

  1. Oracle 字符串split的相关实践使用代码介绍
  2. Oracle 10G for linux常用指令浅析
  3. Oracle数据库中归档进程ARCH的具体论述
  4. Oracle索引收拾的具体描绘
  5. Oracle merge into的实操示例

转载请说明出处
知优网 » Oracle字符集的三大类型(oracle字符集有哪些)

发表评论

您需要后才能发表评论