当前位置:首页 > 日记 > 正文

查看并修改Oracle字符集的详细解释

查看并修改Oracle字符集的详细解释
1。什么是oracle字符集
The Oracle character set is a set of symbols for the interpretation of a byte data, which has the size and the mutual tolerance.The architecture of ORACLE that supports national language allows you to store, handle, and retrieve data using a localized language.It enables database tools, error messages, sort order, date, time, currency, digital, and calendar automatically adapts localised languages and platforms.

影响Oracle数据库字符集的最重要的参数是nls_lang参数。
其格式如下:nls_lang = language_territory.charset
它有三个组件(语言、区域和字符集),每个组件控制NLS子集的特征。
其中:
语言:指定服务器消息的语言,用中文或英文影响提示信息。
区域:指定服务器的日期和数字格式,
字符集:指定的字符集。
如:美国美国。zhs16gbk _
从nls_lang组成,我们可以看到,数据库字符集的真正影响其实是第三个部分。
因此,两个数据库之间的字符集可以将数据导入彼此,只要第三个部分。影响数据的唯一因素是中文或英文。

两。字符集的相关知识:
2.1字符集
在本质上,一组数字代码给某个字符编码方案,按照一套特定的符号。第一编码方案的Oracle数据库支持是US7ASCII。
Oracle的字符集命名遵循以下命名规则:

这是:
例如,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代表所有,指的是所有的语言),zhs16cgb231280
(2)固定长度多字节编码
每个字符使用固定长度的字节编码方案。目前Oracle只支持固定长度的多字节编码af16utf16,并用于国家字符集。
2.2.3 Unicode编码
Unicode是一种覆盖世界上所有已知字符的单一编码方案。也就是说,Unicode提供了独特的每character.utf-16编码是16位编码的Unicode,一个固定长度的多字节编码,2个字节的Unicode字符,和UTF-16编码字符集af16utf16。
UTF-8是Unicode 8位编码方法。它是一种可变长度的多字节编码,可以用1, 2字节和3字节表示。一个Unicode字符表示的al32utf8,UTF8和utfe,这是UTF-8编码字符集。

2.3字符集超级
当字符集(字符集A)数字编码包含所有其他字符集(字符集b)编码值,以及两个字符集编码相同字符的数字表示时,字符集是字符集B超,或B字符集是字符集的子集。
Oracle8i和Oracle9i的官方文件的一个子集超控制表(集的超集对),例如,we8iso8859p1是we8mswin1252子集。因为US7ASCII是Oracle数据库格式编码的早,所以有很多字符集是US7ASCII的超集,如we8iso8859p1,zhs16cgb231280,zhs16gbk是US7ASCII的超集。

2.4数据库字符集(Oracle服务器端字符集)
数据库字符集是在创建数据库时指定的,通常在创建数据库后不能更改。在创建数据库时,可以指定字符集(字符集)和国家字符集(国家字符集)。

2.4.1字符集
(1)用来存储CHAR,VARCHAR2,CLOB,长数据和其他类型
(2)用于标记诸如表名、列名和PL / SQL变量等。
(3)用于存储SQL和SQL SQL程序单元等。

2.4.2国家字符集:
(1)存储数据,数据类型,与其他类型的用户使用
(2)国家字符集本质上是为Oracle选择的一个附加字符集。主要目的是提高Oracle数据库字符处理能力,因为nchar数据类型可以为固定长度的多字节编码支持亚洲,而数据库字符集不是。国家字符集定义在Oracle9i和只能在Unicode编码的af16utf16和UTF8选择,默认值是af16utf16

2.4.3查询字符集参数
可以查询以下数据字典或视图以查看字符集设置
nls_database_parameters,道具nls_parameters美元美元,V
在查询结果中,nls_characterset表示的字符集,而nls_nchar_characterset代表国家字符集

2.4.4修改数据库字符集
如上所述,数据库字符集在创建后原则上不能更改。但是有2种方法可以完成。

1。如果需要修改字符集,通常需要导出数据库数据、重建数据库,然后导入数据库数据来转换它。
2。通过修改数据库字符集语句修改字符集,但在创建数据库字符集的修改是有限的,只有新的字符集是修改数据库字符集的一个超集当前字符集,例如,UTF8是US7ASCII的超集,修改数据库字符集可以使用ALTER DATABASE utf8字符集。

2.5客户端字符集(nls_lang参数)
2.5.1客户端字符集的意义
客户端字符集定义了客户端的字符数据的编码,任何来自或发送到客户端使用客户端定义的字符集编码的字符数据,客户端可以被视为各种各样的应用程序,可以直接与数据库连接如SQLPlus、口/小鬼等。客户端字符集设置nls_lang参数。

2.5.2 nls_lang参数格式
NLS_LANG=_.
语言:显示Oracle消息、检查、日期名称
区域:指定默认日期、数字、货币和其他格式。
客户端字符集:指定客户端将使用的字符集。
例如:nls_lang = american_america.us7ascii
美国是一个语言,是美国的一个区,和US7ASCII是客户端字符集

2.5.3客户端字符集的设置方法
1)unix环境
nls_lang美元=简化chinese_china.zhs16gbk
出口nls_lang美元
编辑Oracle用户的配置文件
2)windows环境
编辑注册表
hkey_local_machine REGEDIT.EXE————软件的预言——家

2.5.4 NLS参数查询
Oracle提供了许多NLS参数,定制数据库和用户机适应当地的格式,如nls_language,nls_date_format,nls_calender,等,可以查询数据字典视图或以下。
nls_database_parameters:显示当前的数据库NLS参数值,包括数据库字符集的价值
nls_session_parameters:显示设定的nls_lang参数,或者参数值后改变会话改变(不包括客户端的字符集设置nls_lang)。
nls_instance_paramete:显示由参数文件init.ora参数的定义
V nls_parameters美元:显示当前的数据库NLS参数值

2.5.5 NLS参数修改
以下方法可用于修改NLS参数
(1)修改实例启动时使用的初始化参数文件。
(2)修改环境变量nls_lang
(3)使用oracle会话语句修改Oracle会话中的会话语句
(4)使用一些SQL函数
角色优先级:SQL函数>更改会话>环境变量或注册表>参数文件>数据库默认参数

三、进出口和字符集
3.1进出口
出口和进口都是阅读和写作的Oracle数据对工具。出口的Oracle数据库数据输出到操作系统的文件,这些文件中导入读取Oracle数据库的数据,由于该口 /进出口数据迁移的使用,从源数据库到目标数据库的数据有四个方面的字符集有关,如果这四个方面的字符集不一致的字符集将发生转换。

____________ _________________ _____________
|进口文件| <- |环境变量nls_lang | <- |数据库字符集|
------------------------------------------
进口
____________ _________________ _____________
|进口文件| -> |环境变量nls_lang | -> |数据库字符集|
------------------------------------------
四个字符集是
(1)源数据库字符集
(2)在出口过程中设置用户会话字符(由nls_lang)
(3)在进口过程中设置用户会话字符(由nls_lang)
(4)目标数据库的字符集

3.2出口换算程序
在导出过程中,如果源数据库字符集与导出用户会话字符集不一致,则发生字符集转换,导出用户会话字符集的ID号存储在导出文件的头几个字节中。
例如:如果使用zhs16gbk源数据库,并导出用户会话字符集使用US7ASCII,因为zhs16gbk是一个16位的字符集,而US7ASCII是7字符集的转换过程,汉字不能同行在US7ASCII人物,所以所有的汉字都会丧失,转化为形式,这样生成的DMP文件已丢失的数据。
所以如果你想正确导出源数据库中的数据,在用户会话字符集过程的出口应等于源字符集的超集的源数据库或数据库的字符集

3.3导入转换过程
(1)确定导出数据库字符集环境。
通过读取导出文件头,可以获得导出文件的字符集。
(2)确定一套进口的会议,这是性格,这nls_lang环境变量是由会话使用
(3)IMP读取导出文件
读取导出文件的字符集ID,并比较与nls_lang导入过程
(4)如果导出的文件字符集与导入的会话字符集相同,则在此步骤中不需要进行转换。如果它不同,它需要将数据转换为导入到会话中的字符集,可以看出在将数据导入数据库过程中发生两个字符集转换。
第一次:导入文件字符集和导入到会话中的字符集之间的转换,如果转换过程没有正确完成,则导入到目标数据库的导入过程将无法完成。
第二次:导入会话字符集和数据库字符集之间的转换。

四。查看数据库字符集
涉及三个方面的字符集。
字符设置在1。Oracle服务器端;
字符设置在2。oracle客户端;
3的字符集。DMP文件。

当您进行数据导入时,需要将这三个字符集保持一致才能正确导入。

4.1查询oracle服务器端的字符集
有很多方法可以找到Oracle服务器端的字符集,而更直观的查询方法如下:
SQL >选择Userenv('language)从双;
Userenv('language)
----------------------------------------------------
简化chinese_china.zhs16gbk

SQL >选择Userenv('language双;
美国美国。zhs16gbk _

4.2如何查询一个DMP文件的字符集
dmp文件由Oracle的EXP工具出口还包含字符集信息,第二和第三字节的DMP文件记录集的DMP文件的字符。如果DMP文件不是很大,例如,只有几米或几十米,你可以使用UltraEdit打开(16元模式)看第二第三字节的内容,如0354,然后使用下面的SQL来找出其对应的字符集。
SQL >选择nls_charset_name(to_number('0354 ','xxxx '))从双;
zhs16gbk

如果dmp文件过大,如2G以上(这是最常见的情况),文本编辑器是缓慢或完全不能打开。您可以使用以下命令(在UNIX主机上):
猫exp.dmp | OD X |头1 | awk {打印2美元3美元}的|切C 3-6
然后利用上面的SQL语句得到相应的字符集。

4.3查询oracle客户端的字符集
在Windows平台下,它在注册表中相应的nls_lang oraclehome。你也可以设置自己的DOS窗口。
例如:设置nls_lang = american_america.zhs16gbk
这只会影响此窗口中的环境变量。

在UNIX平台下,它是环境变量nls_lang。
$ echo $ nls_lang
american_america.zhs16gbk

如果检查结果发现服务器端与客户端的字符集不一致,请将其修改为与服务器端相同的字符集。

补充:
(1)。数据库服务器字符集
SELECT * FROM nls_database_parameters
它是一个表示数据库的字符集。

(2)。客户端字符集环境
SELECT * FROM nls_instance_parameters
它来自V $参数,它代表客户机字符集的设置,它可能是参数文件、环境变量或注册表。

(3)。会话字符集环境
Select * from nls_session_parameters
从V nls_parameters美元,这意味着会议本身的设置。它可能是会话的环境变量或更改会话的完成。如果谈话是不成立的,它将符合nls_instance_parameters。

(4)。客户机的字符集需要与服务器一致才能正确显示数据库的非ASCII字符。
如果存在多个设置,则NLS操作的优先级别是sql函数>更改会话>环境变量或注册表>参数文件>数据库默认参数。

字符集是一致的,但语言设置可以不同,语言设置是推荐英语。如果字符集是zhs16gbk,然后nls_lang可以american_america.zhs16gbk。

五。修改oracle的字符集
正如上面提到的,数据库的字符集是不可以改变的原则后的创作。因此,它是考虑字符集使用在设计和安装的开始重要。数据库服务器,修改错误的字符集将导致许多不可预知的后果,可能会严重影响数据库的正常运行,所以肯定有两种字符集的子集和超集之前修改。一般来说,除非我们不得不修改Oracle数据库,不建议设置服务器端的字符。特别是,我们最常用的两种字符集不是子集和超集zhs16gbk和zhs16cgb231280的关系,所以理论不支持两个字符集之间的相互转换。

但是,有2种方法来修改字符集。
1。通常需要导出数据库数据,重建数据库,然后导入数据库中的数据以转换的方式。
2。通过修改数据库字符集语句修改字符集,但在创建数据库字符集的修改是有限的,只有新的字符集是修改数据库字符集的一个超集当前字符集,例如,UTF8是US7ASCII的超集,修改数据库字符集可以使用ALTER DATABASE utf8字符集。
5.1修改服务器端字符集(不推荐)

1。关闭数据库
立即关闭

2。开始Mount
启动挂载;
启用受限会话;
SQL >修改系统设置job_queue_processes = 0;
SQL >修改系统设置aq_tm_processes = 0;
打开数据库;
-可以从父集设置为子集。
SQL >修改数据库字符集zhs16gbk;
SQL数据库字符集al16utf16 >;
如果是一个子集的父集,你需要使用internal_use参数,跳过超子集检测
SQL >修改数据库字符集internal_use al32utf8;
SQL数据库>改变国家字符集internal_use al16utf16;

立即关闭;
SQL>STARTUP
注意:如果没有大对象,在使用过程中不会对语言转换产生影响。(记住字符集必须是Oracle支持,否则不能启动)。

如果有一个ora-12717:不能修改数据库字符集时,NCLOB数据存在这样的提示,
解决这个问题有两种方法。
1。利用internal_use关键词修改现场,
2。使用重新创建,但重新创建复杂一点,所以用internal_use

立即关闭;
启动安装;
启用受限会话;
SQL >修改系统设置job_queue_processes = 0;
SQL >修改系统设置aq_tm_processes = 0;
打开数据库;
警告:改变internal_use UTF8字符集;
立即关闭;
启动>;
如果你做到以上,有与国家字符集的设置没有问题

5.2修改dmp文件的字符集
如上所述的DMP文件的第二第三字节的字符集信息的记录。因此,直接修改的DMP文件的第二第三字节的内容可以欺骗Oracle检查。这一理论是唯一集的超集可以修改,但在许多情况下,不是在子集和超集关系的情况下也可以修改我们的一些常见的字符集,如US7ASCII,we8iso8859p1,zhs16cgb231280,zhs16gbk基本上是可以改变的,因为变化是唯一的DMP文件,所以影响不是很。

有修改的更具体的方法,和最简单的方法是修改的DMP文件的第二和第三字节直接用UltraEdit。
例如,如果你想改变的DMP文件zhs16gbk字符,你可以使用下面的SQL来找出16二进制码对应这个字符集:SQL >选择to_char(nls_charset_id('zhs16gbk),'xxxx)从双;
0354
然后改变2和3字节的DMP文件0354。
如果dmp文件大,不能打开UE,你需要使用的程序的方法。

5.3客户端字符集设置方法
1)unix环境
nls_lang美元=简化chinese_china.zhs16gbk
出口nls_lang美元
编辑Oracle用户的配置文件
2)windows环境
编辑注册表
hkey_local_machine REGEDIT.EXE————软件的预言——家
或者放在窗户里:
集nls_lang = american_america.zhs16gbk

相关文章

安装MySQL5(不能启动服务)后无法启动

安装MySQL5(不能启动服务)后无法启动

无法启动,启动服务,解决方案,安装,摘要,安装MySQL 5.1.48或MySQL 5.5.8配置,最后点击执行按钮,但没有启动服务步骤。检查MySQL系统服务增加了,但它不能启动,和手工不好。这时,事件查看器可以看到在程序事件MySQL数错误: plugin'innodb'registr…

IE浏览器无法打开新窗口解决方案

IE浏览器无法打开新窗口解决方案

新窗口,解决方案,浏览器,无法打开,电脑软件,最近,我发现我的IE不能打开新窗口。具体形式是:用鼠标左键点击超链接,不要回应,点击鼠标右键超链接,选择弹出式菜单,打开新建窗口,没有动作,我该怎么办找到测试后,终于找到了解决方案。 1、开始菜单;;打开运…

php入门学习点三php上传

php入门学习点三php上传

上传,学习,入门,电脑软件,php,1。上传表单的HTML代码 复制代码代码如下所示: 注意:1,动作是一个新的上传 2,enctype属性应该写成多部分/表单数据 二、PHP代码 复制代码代码如下所示: 如果(is_uploaded_file(_files美元{ IMGS phpupfile美元=美元…

在WindowsXP下设置多用户使用环境

在WindowsXP下设置多用户使用环境

多用户,设置,环境设置,电脑软件,环境,在现实生活中,很多用户经常使用一台计算机,每个用户的个人设置和配置文件都会有所不同。用户可以设置多用户设置,当使用不同的用户设置时,不同的用户将以不同的身份登录。用户标识将在不影响其他用户设置的…

解决中文腻子输入的方法

解决中文腻子输入的方法

输入,方法,中文,腻子,电脑软件,点评:uff1a 打开油灰,在字体设置窗口中选择类别>外观> 改变字体新宋体(实际上改变了其他的中文字体如歌体),字符集是chinease_gb2312…

oracle触发器的应用综述

oracle触发器的应用综述

综述,触发器,电脑软件,oracle,增量序列构造 1从1开始创建序列lzeam_sp_loop_eq_seq自动增加1 测试: 选择lzeam_sp_loop_eq_seq.nextval双 建立触发器 创建触发器lzeam.lzeam_sp_loop_eq_trigger在sp_loop_eq每个,插入前,第一个是:二是正确的; 一…

Linux记录会话进程的命令。

Linux记录会话进程的命令。

命令,进程,电脑软件,Linux,点评:在UNIX系统的维护,有时候系统工程师希望能够记录会议的过程。当测试系统功能,工程师希望通过一个记录测试的一个步骤。为了引起问题,使用该数据的跟踪和分析。有时候,这些会议记录也需要促进培训文件如PPT,如培训,…

Linux命令(壳)从一开始的学习笔记2使

Linux命令(壳)从一开始的学习笔记2使

命令,学习笔记,电脑软件,Linux,xargs,点评:使用搜索,你可以找到的文件或目录,满足一定的特征(如权威、大师、长度、类型、名称等),并结合必要的,好的和xargs做更多的工作。 1,利用找到的,你可以找到的文件或目录,满足一定的特征(如许可、大师、长度、…

通过注册表修改Win7系统日志存放路

通过注册表修改Win7系统日志存放路

存放,系统日志,注册表修改,路径,电脑软件,点评:如何修改Win7系统日志的存储路径,对于一些新朋友,这是一个有点困难。下面简要介绍如何通过注册表实现它。不要错过你感兴趣的朋友。 在win7系统打开注册表编辑器窗口,扩大和找到以下分支: hkey_lo…

Solaris系统VI命令详细解决方案

Solaris系统VI命令详细解决方案

系统,解决方案,命令,详细,电脑软件,评论:进入vi的命令 vi文件名:打开或创建一个新文件,并将光标放在第一行。 文件名:打开文件,把光标放在N行上。 文件名:打开文件,然后放置光标。 进入vi的命令 vi文件名:打开或创建一个新文件,并将光标放在第一行…

Win8,让登录界面不显示用户名停用帐

Win8,让登录界面不显示用户名停用帐

用户名,登录界面,显示,帐户,电脑软件,问题: 新的计算机上安装Win8系统。有许多办公室和多个帐户。为了方便管理,计算机在登录时不允许显示用户名,需要时通过账户切换登录到其他用户帐户。有没有办法解决这个问题 答案uff1a 在Win8界面(Metro…

打开Ghost备份系统文件方法(技术)

打开Ghost备份系统文件方法(技术)

方法,备份,系统文件,技术,电脑软件,问题: 我使用Ghost工具备份系统。现在,我在电脑上安装了一些常用的软件。我不想重新备份系统。如果我将这些软件添加到以前的备份系统文件中, 答案uff1a 如果需要安装附加软件,则不能添加,只能备份系统。如…