Oracle字符集的三大类型
创始人
2024-06-27 21:51:00
0次

我们都知道Oracle字符集问题,可以分成三类: 即,数据库字符集, sqlplus的字符集(客户端字符集),以及 终端程序的字符集 (非Oracle的),以下的文章就是对Oracle字符集三种类型的主要描述。

1、数据库字符集

数据库字符集是所有字符问题的核心,只有数据库本身的字符集正确了,客户端的字符集才可能正确。这里只的客户端包括sqlplus以及我们自己读数据库的应用程序。

 

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

 

1)查询数据库字符集

 

 

  1. select * from nls_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 / as sysdba; 

 

 

若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

 

 

  1. SQL>STARTUP MOUNT;  
  2. SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;  
  3. SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;  
  4. SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;  
  5. SQL>ALTER DATABASE OPEN;  
  6. SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;  
  7. SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;  
  8. SQL>SHUTDOWN IMMEDIATE;  
  9. SQL>STARTUP 

 

 

2 客户端字符集

如果服务器端的Oracle字符集是正确的,而在客户端下,如sqlplus仍然不能正确显示中文,这一般是由于服务器端的字符集设定与客户端的字符集设定不同造成的。只要将两者修改一致就可以解决问题。

 

1)查询客户端字符集

 

 

  1. elect * from nls_instance_parameters 

 

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

 

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

 

 

  1. select userenv('language') from dual; 

 

会话字符集环境 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. set nls_lang="Simplified chinese_china.utf8" 
  2. set nls_lang="american_america.us7ascii" 
  3. set nls_lang="american_america.zhs16gbk" 
  4. set nls_lang="Simplified chinese_china.zhs16gbk" 
  5. set nls_lang=".utf8" 
  6. set nls_lang=".zhs16gbk" 
  7. set nls_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的实操示例

 

 

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...