Oracle服务端与客户端字符集
Oracle客户端NLS_LANG的设置

Oracle客户端NLS_LANG的设置1、操作系统本⾝有字符集 ---locale -a或者chcp2、oracle数据库软件有字符集3、oracle软件的操作系统本⾝也有字符集AL32UTF8【AL】⽀持所有语⾔(All Language)【32】每字符最多占⽤32位(4字节)【UTF8】编码为UTF-8WE8MSWIN1252【WE】⽀持西欧语⾔(Western Europe)【8】每字符需要占⽤8位(单字节)【MSWIN1252】编码为CP1252US7ASCII【US】表⽰美国(United States)【7】每字符需要占⽤7位【ASCII】编码为ASCII字符集说⽩了是⼀个集合,是⼀张表,这个表有两列,左⾯这列是字符是所有要存储的字符。
字符有很多字符,⽐如我们讲中⽂字符:左⾯这列就是中国⼈常⽤的所有的中⽂字符,有汉字、英⽂字母有数字还有⼀些特殊的符号,在左⾯都出现是我们中⽂要使⽤的所有的字符右边是⼀个编码,从1号2、3、4、5、6 ,将来提到1的时候就对应着⼀个字符所以说字符集就是字符和编码的这么⼀个对应表常⽤字符集:US7ASCIIZHS16CGB231280AL32UTF8AF16UTF16ZHS16GBK数据库字符集SQL> select * from nls_database_parameters;PARAMETER VALUE------------------------------------------------------------ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CHARACTERSET AL32UTF8 -------------数据库字符集NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSENLS_NCHAR_CHARACTERSET AL16UTF16 ---------------------国家字符集(⽤的少)NLS_RDBMS_VERSION 11.2.0.1.0客户端字符集SQL> select * from nls_instance_parameters;PARAMETER VALUE------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_SORTNLS_DATE_LANGUAGENLS_DATE_FORMATNLS_CURRENCYNLS_NUMERIC_CHARACTERSNLS_ISO_CURRENCYNLS_CALENDARNLS_TIME_FORMATNLS_TIMESTAMP_FORMATNLS_TIME_TZ_FORMATNLS_TIMESTAMP_TZ_FORMATNLS_DUAL_CURRENCYNLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSE会话字符集SQL> select * from nls_session_parameters;PARAMETER VALUE------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSE修改会话显⽰为中⽂NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" ----------.bash_profile⾥⾯的参数只是在修改会话的字符集,也可以直接export指定NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" -------对应的分别是语⾔、地区、字符集。
5、修改oracle的字符集

[oracle@slave-node2 ~]$ source /home/oracle/.bash_profile 5.3、说明:
以上是一个oracle实例的字符集修改,如果有多个oracle实例,需要进入到实例中按照"5.1"步骤执行即可;
SQL> select userenv('language') from dual; USERENV('LANGUAGE') -------------------------------------------------------------------------------AMERICAN_AMERICA.ZHS16GBK 2、修改字符集,依次执行如下命令:
Processing math: 100%
请求出错错误代码400请尝试刷新பைடு நூலகம்面重试
5、修改oracle的字符集
注意:修改字符集前需要将表空间进行数据泵备份; 5.1、修改server端字符集: 1、登录到oracle实例查看字符集:
[oracle@slave-node2 ~]echoORACLE_SID orcl
[oracle@slave-node2 ~]$ sqlplus sys/123456@orcl as sysdba SQL> show parameter name;
SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP MOUNT; SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL>ALTER DATABASE OPEN; SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8; SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP; SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------AMERICAN_AMERICA.AL32UTF8 5.2、修改client端字符集: 1、设置client端字符集: [oracle@slave-node2 ~]$ cat /home/oracle/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=PATH : HOME/.local/bin:$HOME/bin export PATH export ORACLE_BASE=/application/oracle #oracl安装目录 export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 #oracle路径 export ORACLE_SID=orcl #oracle启动数据库实例名 export ORACLE_TERM=xterm #xterm窗口模式安装 export PATH=ORACLEHOME/bin: /usr/sbin:PATH #添加系统环境变量 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib #添加系统环境变量 export LANG=en_US.UTF-8 #防止安装过程出现乱码 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #设置Oracle客户端字符集,必须和oracle安装时的字符集保持一致
Oracle查看数据库字符集和客户端字符集SQL语句

Oracle查看数据库字符集和客户端字符集SQL语句
Oracle 数据库分为数据库字符集和客户端字符集两种!
很多刚接触的朋友经常会搞混这两个字符集,数据库字符集是在创建数据库时进行指定的,不建议更改!而客户端字符集是可以随时更改的!
查询数据库字符集:
select * from nls_database_parameters t where t.parameter i n ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
查询客户端字符集:
SELECT USERENV('language') FROM DUAL;
如何修改客户端字符集?
Windows:
set NLS_LANG=american_america.AL32UTF8set NLS_LANG =SIMPLIFIED CHINESE_CHINA.ZHS16GBK
Linux:
export NLS_LANG=american_america.AL32UTF8export NLS_ LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
以上为常用客户端字符集,一个是英文,一个是中文!
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。
Oracle查看字符集

Oracle查看字符集1.查看字符集1⼀、oracle服务端字符集2 SQL> select userenv('language') from dual ;34 USERENV('LANGUAGE')5 ----------------------------------------------------6 AMERICAN_AMERICA.ZHS16GBK789⼆、oracle客户段字符集10112.1 window环境下,修改注册表ORACLE_HOME⽬录下的环境变量NLS_LANG。
12132.2 unix/linux环境下,就是环境变量$NLS_LANG1415 [oracle@wang ~]$ echo $NLS_LANG16 AMERICAN_AMERICA.ZHS16GBK1718查看数据库字符集1920数据库服务器字符集select * from nls_database_parameters;,其来源于props$,是表⽰数据库的字符集。
2122 客户端字符集环境select * from nls_instance_parameters;,其来源于v$parameter,表⽰客户端的字符集的设置,可能是参数⽂件,环境变量或者是注册表23 24如何查询dmp⽂件的字符集2526⽤oracle的exp⼯具导出的dmp⽂件也包含了字符集信息,dmp⽂件的第2和第3个字节记录了dmp⽂件的字符集。
如果dmp⽂件不⼤,⽐如只有⼏M或⼏⼗M,可以⽤UltraEdit打开(16进制⽅式),看第2第3个字节的内容,如0354,然后⽤以下SQL查2728 SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;2930 ZHS16GBK3132如果dmp⽂件很⼤,⽐如有2G以上(这也是最常见的情况),⽤⽂本编辑器打开很慢或者完全打不开,可以⽤以下命令(在unix主机上):33cat exp.dmp |od -x|head -1|awk'{print $2 $3}'|cut -c 3-634然后⽤上述SQL也可以得到它对应的字符集2.od 命令解释#od命令功能说明:输出⽂件内容。
如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量

如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量概述:本地化是系统或软件运⾏的语⾔和⽂化环境。
设置NLS_LANG环境参数是规定Oracle数据库软件本地化⾏为最简单的⽅式。
NLS_LANG参数不但指定了客户端应⽤程序和Oracle数据库所使⽤的语⾔和地区;同时也指定了客户端程序输⼊数据和显⽰数据所使⽤的字符集。
本⽂主要包含如下五部分◆ NLS_LANG环境变量的构成◆ NLS_LANG环境变量的格式◆如何查看数据库NLS参数设置◆举例说明如何设置NLS_LANG环境变量◆举例说明⼀些特殊情况⼀,NLS_LANG环境变量的构成NLS_LANG环境变量由如下三部分构成:1,LANGUAGE:客户端系统所使⽤的语⾔。
指定Oracle数据库反馈的消息(例如异常信息,提⽰信息等)、字符数据的排列顺序(当指定ORDER BY时)、⽇(年⽉⽇中的天)名称,⽉名称等所使⽤的语⾔。
每个⽀持的语⾔都有唯⼀的名称。
例如,若操作系统使⽤简体中⽂,则为SIMPLIFIED CHINESE;若操作系统使⽤美式英⽂操作系统,则为AMERICAN。
LANGUAGE参数中隐含地区和字符集参数的信息。
如果没有指定LANGUAGE参数的值,则默认值为AMERICAN。
2,TERRITORY:客户端系统所在的地区。
指定默认的⽇期,货币以及数字格式。
每⼀个⽀持的地区都有唯⼀的名称。
如,CHINA,AMERICA或CANADA。
如果没有指定TERRITORY参数,则此参数的值由LANGUAGE参数推理得出。
3,CHARSET:客户端应⽤程序所使⽤的字符集。
正确地设置NLS_LANG环境变量,则使得字符数据能够在客户端字符集和数据库字符集之间正确地转换。
设置NLS_LANG不会改变客户端系统的字符集,它仅仅是让Oracle数据库知道客户端应⽤程序使⽤的是什么字符集,从⽽进⾏相应的字符集转换。
如果客户端和数据库字符集相同,则Oracle数据库忽略字符集校验,不执⾏字符集转换。
oracle数据库字符集

oracle数据库字符集Oracle字符集的基本原理1. Oracle服务器字符集oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置。
⽅法1SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';PARAMETER VALUE---------------------------------------------------------------- ----------------------------------------------------------------NLS_CHARACTERSET AL32UTF8⽅法2SQL> select userenv('language') from dual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.AL32UTF82. 客户端操作系统字符集Windows,可以使⽤chcp命令获得代码页(code page)C:\Users\zy>chcp活动代码页: 936到微软的官⽅⽂档《》找到其对应的字符集Linux,字符集在/etc/sysconfig/i18n设置:LANG="zh_CN.GB2312" (指定当前操作系统的字符集)SUPPORTED="zh_CN.GB2312"(指定当前操作系统⽀持的字符集)SYSFONT="lat0-sun16"(指定当前操作系统的字体)3.客户端NLS_LANG参数:该参数⽤于向Oracle指⽰客户端操作系统字符集它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语⾔、地域和字符集),每个成分控制了NLS⼦集的特性。
Oracle-字符集转换

Oracle-字符集转换字符集是按照⼀定的字符编码⽅案,对⼀组特定的符号,分别赋予不同数值编码的集合。
⽇常使⽤时,服务端与客户端字符集需⼀致。
--服务端select*from nls_database_parameters;--客户端SELECT USERENV('LANGUAGE') FROM DUAL;数据库字符集调整最常⽤的是ALTER命令和完全的导出和导⼊两种。
第⼀种,ALTER DATABASE字符集语句是迁移字符集的最快⽅法,但只能在特殊情况下使⽤。
ALTER DATABASE字符集语句不执⾏任何数据转换,因此,当且仅当新字符集是当前字符集的严格超集时,才可以使⽤它。
--ALTER DATABASE字符集语句的语法如下,db_name为可选项:ALTER DATABASE[db_name]CHARACTER SET new_character_set;第⼆种,数据泵(EXPDP/IMPDP)⽅式代价较⾼,耗时且占⽤资源多,并且需要在迁移时对数据进⾏扫描,确认在迁移时是否会发⽣数据截断和字符集转换错误。
数据库字符集迁移有两个阶段:数据扫描和数据转换。
在更改数据库字符集之前,使⽤字符集扫描⼯具确定在更改数据库字符集之前所需的⼯作量。
使⽤数据泵导⼊导出脚本⽰例,脚本需在数据库服务器执⾏:--查看管理员⽬录确认导出⽂件位置路径SELECT*FROM dba_directories;--expdp导出带有条件expdp ⽤户/密码@服务名 directory=DATA_PUMP_DIR dumpfile=数据⽂件⽂件名.dmp logfile=⽇志⽂件⽂件名.log tables=导出表名 query='" where lsh in (select lsh from table_1 where code !='1' and flag='1')"' CONTENT选项可选导出结构或数据导出格式默认为.dmp--impdp导⼊导⼊时重命名存在表则增加数据主键重复数据忽略导⼊时也可以限定导⼊时所属表空间impdp ⽤户/密码@服务名 directory=DATA_PUMP_DIR dumpfile=数据⽂件⽂件名.dmp REMAP_TABLE =导出⽤户名.导出表名:导⼊表名 TABLE_EXISTS_ACTION=append data_options=skip_constraint_errors 字符集扫描⼯具 Character Set Scanner 适⽤于 Oracle Database 10g 和 Oracle Database 11g 的字符集扫描程序作为数据库软件的⼀个组件提供。
Oracle中汉字的乱码问题

Oracle中汉字的乱码问题ZDNet软件频道时间:2007-10-06作者:中国IT实验室| 中国IT实验室我要评论()本文关键词:开发数据库Oracle在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比较多。
ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事ORACLE数据库管理。
在国内外大中型数据库管理系统中,把Oracle作为数据库管理平台的用户比较多。
Oracle不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事Oracle数据库管理,经常收到周围用户和外地用户反映有关Oracle数据库汉字显示问题的求援信,主要现象是把汉字显示为不可识别的乱码,造成原来大量信息无法使用。
本文将就这一问题产生的原因和解决办法进行一些探讨,供存在这方面问题的用户朋友参考。
1、原因分析通过对用户反映情况的分析,发现字符集的设置不当是影响Oracle数据库汉字显示的关键问题。
那么字符集是怎么一会事呢?字符集是Oracle为适应不同语言文字显示而设定的。
用于汉字显示的字符集主要有ZHS16CGB231280,US7ASCII,WE8ISO8859P1等。
字符集不仅需在服务器端存在,而且客户端也必须有字符集注册。
服务器端,字符集是在安装Oracle时指定的,字符集登记信息存储在Oracle数据库字典的V$NLS_PARAMETERS表中;客户端,字符集分两种情况,一种情况是sql*net 2.0以下版本,字符集是在windows的系统目录下的Oracle.ini文件中登记的;另一种情况是sql*net 2.0以上(即32位)版本,字符集是在windows的系统注册表中登记的。
要在客户端正确显示Oracle数据库汉字信息,首先必须使服务器端的字符集与客户端的字符集一致;其次是加载到Oracle数据库的数据字符集必须与服务器指定字符集一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle客户端与服务端字符集
Oracle 数据库对字符的处理及表现形式分为三个层面,优先级先后分别是数据库初始化参数字符集、OS操作系统环境变量级、session级。
数据库初始化参数字符集是在建数据库前指定的字符集,使用如下语句查询数据库字符集:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
完整字符集名称分为三部分:语言_地域.字符集,这里以
AMERICAN_AMERICA.ZHS16GBK 和SIMPLIFIED CHINESE_CHINA.ZHS16GBK 为例说明各部分的含义:
语言决定了提示信息使用的语言,如AMERICAN表示使用英语,SIMPLIFIED CHINESE表示使用简体中文;
地域决定了缺省的日期格式等,如:
AMERICA的时间格式为:
SQL>select sysdate from dual;
SYSDATE
------------
20-AUG-12
CHINA的时间格式为:
SQL>select sysdate from dual;
SYSDATE
--------------
20-8月-12
字符集的格式为<语言><比特位数><编码>比如: ZHS16GBK表示采用GBK 编码格式、16位(两个字节)简体中文字符集。
数据库建立后字符集原则上不要修改,如果修改可以用命令alter database set character set xxx; 不过这样修改有一定的危险,有可能会出现乱码造成数据的丢失,而且修改后的字符集一定是修改前字符集的超集,修改数据库字符集一般采用两种方法:
1.导出数据库数据,重建数据库,再导入数据库数据的方式来转换。
2.通过ALTER DATABASE CHARACTER SET语句修改字符集,具体操作
如下:
1)关闭数据库
SQL>SHUTDOWN IMMEDIATE
2)启动到Mount
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE NATIONAL CHARACTER SET ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
注:启动数据库后应将有改动的JOB_QUEUE_PROCESSES、AQ_TM_PROCESSES等参数修改为原有值。
NLS_CHARACTERSET设置服务器的字符集。
NLS_LANG客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用。
如:当某客户端的NLS_LANG配置的字符集为:SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280,但Oracle服务端配置的字符
集为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这样通过客户端操作的字符数据将ZHS16CGB231280字符集编码,则可能导致一些ZHS16CGB231280字符集中不包含的特殊字符出现乱码。
SQL> select '闫珅豪' from dual;
'闫?豪'
------------
闫?豪
因此在配置客户端字符集时应与Oracle服务端字符集保持一致,但是语言设置却可以不同,语言设置建议用英文。
设置客户端字符集可修改.cshrc或.bash_profile配置文件中的NLS_LANG与Oracle服务端一致的字符集,或使用如下命令:
cshrc:
setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
bash_profile:
export NLS_LANG='SIMPLIFIED CHINESE'_CHINA.ZHS16GBK
总之,当业务数据存入数据库后中文字符出现乱码时,我们应当查看对数据库存在DML操作的子系统所在服务器配置的NLS_LANG,如果与数据库的字符集不一致,则需修改服务器的NLS_LANG与数据库字符集保持一致;同时,在创建数据库时选择正确的数据库字符集十分重要,这样可以避免由于修改数据库字符集造成的数据异常问题。
附录:Oracle字符集子集、超集对照表
Oracle字符集子集
、超集对照表.docx。