设置环境变量修改Oracle客户端字符集
Oracle修改字符集plsql查询显示乱码

Oracle修改字符集plsql查询显⽰乱码修改Oracle字符集oracle11g更改字符集AL32UTF8为ZHS16GBK当初安装oracle的时候选择的默认安装,结果字符集不是以前经常⽤的16GBK,要改字符集,从⽹上找到了⽅法并试了⼀下,果然好⽤!具体如下:登录SQL Plus在SQL Puls中的命令如下:SQL> conn /as sysdba已连接。
SQL> shutdown immediate;数据库已关闭。
已经卸载数据库。
SQL> startup mountORACLE例程已经启动。
…… …………………………………………数据库装载完毕。
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;第1⾏出现错误:ORA-12712: new character set must be a superset of old character set提⽰我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;数据库已更改。
--我们看到这个过程和之前ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了⼦集与超集的校验.SQL> select * from v$nls_parameters;RARAMETERVALUENAS_LANGUAGESIMPLIFIED CHINESENLS_TERRITORYCHINA……SQL> shutdown immediate;SQL> startupORA-01081:???????ORACLE-???????意思是⽆法启动已运⾏的ORACLE,请⾸先关闭它SQL> select * from v$nls_parameters;⾄此,字符集的修改就完成了,我们可以通过输⼊命令验证⼀下,其结果已经变成了ZHS16GBK了。
oracle导入出现字符集问题解决办法

oracle导入出现字符集问题解决办法场景:把一台linux上的oracle库的数据捣腾到一台 windows2003上的oracle库中,在捣腾的过程中乱码了!有经验的知道多半是要改windows的注册表。
注册表打开发方式:Win98/98SE/Me运行中输入regedit.exe 无权限限制Win2000/XP1.开始>>运行.中输入regedt322.开始>>运行.中输入regedit第一种方法打开的注册表编辑器和Win98下的一样,而且功能相同,而使用第二种方法打开的注册表编辑器则可以方便的设置权限,建议网络管理员使用第2种方法打开注册表编辑器修改需要修改的权限设置部分以免被他人恶意修改。
Windows Vista/71.在开始菜单搜索框中输入regedit并按回车键.(需要管理员权限)2.在运行中输入regedit.exe(需要管理员权限)1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<language>_<territory>.<client character set>Language:指定Oracle消息使用的语言,校验,日期中月份和日显示。
Territory:指定默认日期、数字、货币等格式,地区和计算星期及日期的习惯。
Client character set:控制客户端应用程序使用的字符集例如:NLS_LANG=AMERICAN_7ASCIIAMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集通常设置或者等于客户端(如Windows)代码页或者对于unicode应用设置为UTF8在Windows上查看当前系统的代码页可以使用chcp命令:E:\>chcp活动的代码页: 936代码页936也就是中文字符集 GBK,在Microsoft的官方站点上,我们可以遭到关于936代码页的具体编码规则,请参考以下链接:/globaldev/reference/dbcs/936.htm2. 查看 NLS_LANG 的方法Windows使用:注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG查看Unix使用:env|grep NLS_LANG如:/opt/oracle>env|grep NLS_LANGNLS_LANG=AMERICAN_CHINA.ZHS16GBKWindows客户端设置,可以在注册表中更改NLS_LANG,具体键值位于:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\xx指存在多个ORACLE_HOME时系统编号。
Oracle 字符集的查看和修改

Oracle 字符集的查看和修改一、什么是Oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响Oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:Language:指定服务器消息的语言,影响提示信息是中文还是英文Territory:指定服务器的日期和数字格式,Charset:指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
二.字符集的相关知识:2.1 字符集实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。
Oracle数据库最早支持的编码方案是US7ASCII。
Oracle的字符集命名遵循以下命名规则:<Language><bit size><encoding>即: <语言><比特位数><编码>比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集2.2 字符编码方案2.2.1 单字节编码(1)单字节7位字符集,可以定义128个字符,最常用的字符集为US7ASCII(2)单字节8位字符集,可以定义256个字符,适合于欧洲大部分国家例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码)2.2.2 多字节编码(1)变长多字节编码某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持,例如日语、汉语、印地语等例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)、zhs16cgb231280(2)定长多字节编码每一个字符都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节编码是AF16UTF16,也是仅用于国家字符集2.2.3 unicode编码Unicode是一个涵盖了目前全世界使用的所有已知字符的单一编码方案,也就是说Unicode为每一个字符提供唯一的编码。
如何设置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数据库忽略字符集校验,不执⾏字符集转换。
[vip专享]Oracle字符集查看和修改
![[vip专享]Oracle字符集查看和修改](https://img.taocdn.com/s3/m/558339be3169a4517623a374.png)
Oracle 字符集的查看和修改分类:Oracle 基础知识 2009-12-01 16:02 28581人阅读评论(10) 收藏举报一、什么是Oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响Oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:Language:指定服务器消息的语言,影响提示信息是中文还是英文Territory:指定服务器的日期和数字格式,Charset:指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
二.字符集的相关知识:2.1 字符集实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。
Oracle数据库最早支持的编码方案是US7ASCII。
Oracle的字符集命名遵循以下命名规则:<Language><bit size><encoding>即: <语言><比特位数><编码>比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集2.2 字符编码方案2.2.1 单字节编码(1)单字节7位字符集,可以定义128个字符,最常用的字符集为US7ASCII(2)单字节8位字符集,可以定义256个字符,适合于欧洲大部分国家例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码)2.2.2 多字节编码(1)变长多字节编码某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持,例如日语、汉语、印地语等例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)、zhs16cgb231280(2)定长多字节编码每一个字符都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节编码是AF16UTF16,也是仅用于国家字符集2.2.3 unicode编码Unicode是一个涵盖了目前全世界使用的所有已知字符的单一编码方案,也就是说Unicode为每一个字符提供唯一的编码。
修改oracle数据库的字符集方法(RAC)

Database Buffers 1124073472 bytes
Redo Buffers 14692352 bytes
SQL> Alter database mount exclusive;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET aq_tm_processes=0;
System altered.
SQL> Alter database open;
Database altered.
ORA-12720: operation requires database is in EXCLUSIVE mode
3、停止数据库(rac1和rac2都要停止,进入两个实例分别停止)
SQL> shutdown immediate;
Database closed.
Database dismounted.
5、修改字符集
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;
SQL>alter database national character set internal_use AL16UTF16;
sql> alter system set cluster_database=true scope=spfile sid='zijindb1';
修改:
SQL>
5、关闭数据库
修改oracle会话字符集

修改oracle会话字符集-概述说明以及解释1.引言1.1 概述概述部分是文章引言的一部分,在这部分中,我们介绍文章的主题和背景,总结讨论的目的和重要性。
下面是可以在概述部分中包含的内容:概述:Oracle是一种流行的关系数据库管理系统(RDBMS),被广泛用于许多企业和组织的数据管理和存储。
在Oracle数据库中,会话是与数据库建立的连接相关联的重要概念。
会话字符集是指用于存储和处理会话中的字符数据的编码集。
本文将讨论如何修改Oracle会话字符集。
会话字符集的选择在数据存储和处理过程中扮演着至关重要的角色。
正确选择和设置会话字符集可以确保数据的准确性和完整性,并且能够正确地处理各种字符集和语言。
在本文的正文部分,我们将首先介绍Oracle会话字符集的基本概念和操作原理。
然后,我们将深入讨论修改Oracle会话字符集的必要性,包括解释为什么有时需要修改会话字符集以满足特定的业务需求。
接下来,我们将详细阐述修改Oracle会话字符集的方法和步骤。
这包括在数据库级别和会话级别进行字符集的修改。
我们还会介绍一些常见的问题和注意事项,以帮助读者避免潜在的错误或数据损坏。
通过本文的阅读,读者将能够了解到修改Oracle会话字符集的重要性,并学习到正确设置和操作会话字符集的方法。
这将对数据库管理员和开发人员在处理多语言数据和跨国业务时具有重要意义。
总之,本文旨在为读者提供一个全面的指南,帮助他们理解和掌握修改Oracle会话字符集的技巧和方法。
通过正确设置和操作会话字符集,读者将能够更好地处理和管理Oracle数据库中的多语言数据,提高数据的质量和可靠性。
1.2文章结构文章结构部分内容:文章结构是指文中的章节安排和组织方式,它有助于读者理解文章的脉络和逻辑关系。
本文按照引言、正文和结论三个部分进行组织和阐述。
引言部分首先概述了修改Oracle会话字符集的背景和意义,介绍了文章的主要目的和内容。
接着,文章结构部分对整篇文章进行了简要的概述和分类,以帮助读者更好地掌握文章的框架。
Oracle字符集

NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
把852换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制数与十六进制之间的转换,想明白其中的道理)
TABLESPACES 将传输的表空间列表
在没有警告的情况下成功终止导出。
C:\>
帮助已经很详细的说明了参数的意义和使用方法,并列举了几个简单的例子,注意的是,从8i开始,已经开始支持数据子集的方法,就是可以指定自己的Where条件,可以从表中导出一行或多行数据。
注意上面的set nls_lang=simplified chinese_china.zhs16gbk,通过设置环境变量,可以让exp的帮助以中文显示,如果set nls_lang=American_america.字符集,那么你的帮助就是英文的了。
USERID 必须是命令行中的第一个参数。
关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导出整个文件 (N)
·在816和以后,必须使用sysdba才能操作
·这个命令在SQL中必须放置在一行(这里是因为显示问题放在了两行)
c.拷贝数据文件到另一个地点,即目标数据库
可以是cp(unix)或copy(windows)或通过ftp传输文件(一定要在bin方式)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PARAMETER
VALUE
------------------------------
-------------------------
NLS_CHARACTERSET
US7ASCII
影 响 客 户 端 字 符 集 的 是 环 境 变 量 NLS_LANG, 在 Win-
dows 中 , 确 定 客 户 端 字 符 集 首 先 是 本 进 程 定 义 的 环 境 变 量
在前文提到的问题中, 当字符集为 US7ASCII 的数据库数 据传送到字符集为 ZHS16GBK 数据库之前, 必须分别用不同 客户端字符集连接不同的数据库, 否则至少会出现 1 次字符 集转换的问题。同样, 程序至少需要做 1 次修改客户端字符集 的操作。
常见修改客户端字符集方法是 修 改 注 册 表 中 NLS_LANG 的值, 连接数据库后, 再将注册表中的值恢复。此方法存在 2 个问题: ( 1) 某些情况, 操作系统不允许修改注册表; ( 2) 如果 忘记将注册表中 NLS_LANG 的值恢复, 可能会影响其他程序。
nls_database_parameters 获权限, 无需额外授权:
SQL> select PARAMETER, VALUE
2 from nls_database_parameters
3 where PARAMETER ='NLS_CHARACTERSET';
如前文所述, 影响客户端字符集值的首先是环境变量 NLS_LANG。因此, 在应用程序中可以通过修改本程序的环境 变量 NLS_LANG 来达到目的。以开发语言 PowerBuilder 为例, 通 过 调 用 Windows 的 API 设 置 环 境 变 量 NLS_LANG 来 修 改 客户端字符集。
如果想重设环境变量 NLS_LANG,使程序使用系统注册表 中 定 义 的 NLS_LANG 值 , 只 需 将 环 境 变 量 NLS_LANG 置 为 NULL。 代 码 实 现 如 下 : String ls_Enviorment_Variable = "NLS_LANG" String ls_Value3 SETNULL(ls_Value3) SetEnvironmentVariable(ls_Enviorment_Variable, ls_Value3) 4 方法改进
45 医疗卫生装备·2007 年 12 月第 28 卷第 12 期
Chine s e Me dica l Equipme nt J ourna·l Vol.28 No.12 De ce mbe r 2007
医院数字化 HOS PITAL DIGITALIZATION
NLS_LANG; 其 次 , 查 找 系 统 定 义 的 该 环 境 变 量 ; 最 后 , 则 使 用 注册表中的定义。当客户端连接数据库成功后, 会话直到断开 连接前将一直使用该字符集, 不受客户端修改字符集的影响。 3 解决方法
S e t t in g e n viro n m e n t va ria b le t o u p d a t e Ora cle clie n t 's ch a ra ct e r s e t
WU Ya n- ming1, GUO Ge 2 (1. Beijing Hos pital, Beijing 100730, China; 2. Information Center, Health Department of General Logis tics
首先定义外部函数: FUNCTION ulong SetEnvironmentVariable (ref string lpName,ref string lpValue) LIBRARY "kernel32.dll" ALIAS FOR "SetEnvi- ronmentVariableA" 在连接第 1 个数据库之前, 首先置环境变量 NLS_LANG 的值 为 : "AMERICAN_AMERICA.US7ASCII" , 成 功 连 接 后 , 置 环 境 变 量 NLS_LANG 的 值 为 : "AMERICAN_AMERICA ZHS16GBK"。连接第 2 个数据库, 简化的代码如下: Transaction sqlca_1 , sqlca_2 // 定 义 2 个 事 务 对 象, 分 别 连 接 2 个数据库 String ls_Enviorment_Variable = "NLS_LANG" String ls_Value1 = "AMERICAN_AMERICA.US7ASCII" String ls_Value2 = "AMERICAN_AMERICA.ZHS16GBK" /* 连接第 1 个数据库 */ sqlca_1 = Create Transaction /* 设 置 sqlca_1 有 关 属 性 值 , 例 如 dbms、servername、logid 和 logpass */ …… /* 设 置 环 境 变 量 NLS_LANG 为 AMERICAN_AMERICA . US7ASCII */ SetEnvironmentVariable(ls_Enviorment_Variable, ls_Value1) CONNECT USING SQLCA _1 ; /* 连接第 1 个数据库 */ sqlca_2 = Create Transaction /* 设 置 sqlca_2 有 关 属 性 值 , 例 如 dbms、servername、logid 和 logpass */ …… /* 设 置 环 境 变 量 NLS_LANG 为 AMERICAN_AMERICA. ZHS16GBK */ SetEnvironmentVariable(ls_Enviorment_Variable, ls_Value2) CONNECT USING SQLCA_2 ; /* 其他数据处理 ……. */
Oracle 数 据 库 是 通 过 字 符 集 支 持 国 家 语 言 的 体 系 结 构 , 它 允 许 使 用 本 地 化 语 言 来 存 储 、处 理 和 检 索 数 据 。字 符 集 不 同 决定了数据存储格式和显示形式的不同。
Oracle 数据库的 字 符 集 分 为 服 务 端 字 符 集 和 客 户 端 字 符 集, 数据库服务端的字符集决定数据在数据库中存储的格式, 例如: 1 个汉字在单字节字符集 ( 如 US7ASCII) , 占用 2 个字 节, 而在多字节字符集( 如 ZHS16GBK) 中只占 1 个字节。客户 端的字符集决定数据检索出来后显示的形式。数据库服务端 字符集和客户端字符集可以是不同的( 见图 1) 。
医院数字化 HOS PITAL DIGITALIZATION
设置环境变量修改 Or acle客户端字符集
吴燕明 1 郭 歌 2 ( 1.北京医院 北京市 100730; 2.总后卫生部信息中心 北京市 100842)
摘要 目的: 防止不同字符集的 Oracle 数据库间进行数据交换时产生数据转换或损耗。方法: 通过设置环境变量修改客 户端字符集, 可以简单而有效地解决因字符集转换而带来的数据转换或损耗的问题。结果: 修改应用程序的环境变量而 不是注册表, 可同时链接不同字符集的 Oracle 数据库。结论: 通过给出 1 个客户端自适应服务端字符集的方法可以解决 数据转换或损耗问题。 关键词 Oracle; 字符集; 环境变量 中图分类号: TP311.138 文献标志码: A 文章编号: 1003- 8868( 2007) 12- 0045- 02
在上面的例子中, 已知数据库服务端的字符集, 再设置相 应的客户端字符集。那么, 在不知数据库服务端字符集的情况 下, 怎样做到自适应设置客户端的字符集。
首先, 连接数据库, 获取数据库服务端的字符集; 然后, 断 开连接, 按照所取得的数据库服务端字符集, 重新设置客户端 字符集; 最后, 连接数据库。由于字符集的代码都是英文字母, 而任何字符集都包括英文字母, 在第 1 次连接数据库时, 即使 客户端和服务端字符集不匹配, 也会取得正确的服务端的字 符集, 而不会出现因字符集转换产生数据转换或损耗的问题。 其实现代码如下: String ls_Enviorment_Variable = "NLS_LANG" String ls_characterset /* 设置 sqlca 有关属性值, 例如 dbms、servername、logid 和 log- pas */ …… CONNECT USING SQLCA ; /* 提取数据库服务器端字符集, */ select value into :ls_characterset from nls_database_parameters where parameter = 'NLS_CHARACTERSET' USING SQLCA; If sqlca.sqlcode = 0 Then /* 断开事务 */ DISCONNECT USING SQLCA ; /* 设置 NLS_LANG 环境变量 */ ls_characterset = "AMERICAN_AMERICA." +ls_characterset SetEnvironmentVariable (ls_Enviorment_Variable, ls_character- set) /* 重新连接事务 */ CONNECT USING SQLCA ; End If 5 小结
影响 Oracle 字符集最重要的参数是 NLS_LANG。它的格
作者简介: 吴燕明, 助理工程师, 主要从事医院信息化建设方面的研究工 作, Email: annetta@126.com。