Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有 大小的差异,也有互相包容关系。Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,

排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:

NLS_LANG = language_territory.charset

它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:

Language 指定服务器消息的语言,territory

指定服务器的日期和数字格式,charset指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK。

从NLS_LANG的组成我们可以看出,真正影响Oracle数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

如何查询Oracle的字符集

很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是Oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。

1、查询Oracle Server端的字符集:

有很多种方法可以查出oracle

server端的字符集,比较直观的查询方法是以下这种:

SQL>select userenv(‘language’) from

dual; 结果类似如下:AMERICAN _ AMERICA.

ZHS16GBK。

2、如何查询dmp文件的字符集:

用Oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2

和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的

内容,如0354,然后用以下SQL查出它对应的字符集:

SQL> select

nls_charset_name(to_number('0354','xxxx')) from dual;

ZHS16GBK

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

cat exp.dmp od -x head -1 awk '{print $2 $3}' cut -c 3-6 然后用上述SQL也可以得到它对应的字符集。

3、查询Oracle client端的字符集:

这个比较简单。在Windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在Dos窗口里面自己设置,比如:

set nls_lang=AMERICAN_AMERICA.ZHS16GBK

这样就只影响这个窗口里面的环境变量。 在Unix平台下,就是环境变量NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

如果检查的结果发现Server端与Client端字符集不一致,请统一修改为同Server端相同的字符集。

修改Oracle的字符集

Oracle的字符集有互相的包容关系

如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。

一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考 虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,

那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所

以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说 明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支 持。

修改Server端字符集(不建议使用):

在Oracle

8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但Oracle8之后,至少有三张系统表记录了Oracle数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

$sqlplus /nolog SQL>conn / as

sysdba;

若此时数据库服务器已启动,则先执行SHUTDOWN

IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

修改dmp文件字符集:

上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第 2第3字节的内容就可以‘骗’过Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有 大小的差异,也有互相包容关系。Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,

排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:

NLS_LANG = language_territory.charset

它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:

Language 指定服务器消息的语言,territory

指定服务器的日期和数字格式,charset指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK。

从NLS_LANG的组成我们可以看出,真正影响Oracle数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

如何查询Oracle的字符集

很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是Oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。

1、查询Oracle Server端的字符集:

有很多种方法可以查出oracle

server端的字符集,比较直观的查询方法是以下这种:

SQL>select userenv(‘language’) from

dual; 结果类似如下:AMERICAN _ AMERICA.

ZHS16GBK。

2、如何查询dmp文件的字符集:

用Oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2

和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的

内容,如0354,然后用以下SQL查出它对应的字符集:

SQL> select

nls_charset_name(to_number('0354','xxxx')) from dual;

ZHS16GBK

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

cat exp.dmp od -x head -1 awk '{print $2 $3}' cut -c 3-6 然后用上述SQL也可以得到它对应的字符集。

3、查询Oracle client端的字符集:

这个比较简单。在Windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在Dos窗口里面自己设置,比如:

set nls_lang=AMERICAN_AMERICA.ZHS16GBK

这样就只影响这个窗口里面的环境变量。 在Unix平台下,就是环境变量NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

如果检查的结果发现Server端与Client端字符集不一致,请统一修改为同Server端相同的字符集。

修改Oracle的字符集

Oracle的字符集有互相的包容关系

如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。

一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考 虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,

那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所

以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说 明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支 持。

修改Server端字符集(不建议使用):

在Oracle

8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但Oracle8之后,至少有三张系统表记录了Oracle数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

$sqlplus /nolog SQL>conn / as

sysdba;

若此时数据库服务器已启动,则先执行SHUTDOWN

IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

修改dmp文件字符集:

上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第 2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我

们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp 文件,所以影响不大。

具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:

SQL> select to_char(nls_charset_id('ZHS16GBK'),

'xxxx') from dual; 0354

然后将dmp文件的2、3字节修改为0354即可。

如果dmp文件很大,用ue无法打开,就需要用程序的方法了。网上有人用java存储过程写了转换的程序(用java存储过程的好处是通用性教好,缺点是比较麻烦)。我在Windows下测试通过。但要求Oracle数据库一定要安装JVM选项。

以上的相关内容就是对Oracle数据库字符集究竟的介绍,望你能有所收获。oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我

们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp 文件,所以影响不大。

具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:

SQL> select to_char(nls_charset_id('ZHS16GBK'),

'xxxx') from dual; 0354

然后将dmp文件的2、3字节修改为0354即可。

如果dmp文件很大,用ue无法打开,就需要用程序的方法了。网上有人用java存储过程写了转换的程序(用java存储过程的好处是通用性教好,缺点是比较麻烦)。我在Windows下测试通过。但要求Oracle数据库一定要安装JVM选项。

oracle数据查字符集,Oracle数据库字符集的查询相关推荐

  1. oracle查询一列汇总,【学习笔记】Oracle数据筛选 查找oracle所有表中的特定列中的某些数据...

    天萃荷净 开发DBA反映,根据需求需要查找Oracle数据库中所有表中特定的列中指定的关键词的数据,和数据内容和数量 找出数据库中所有表表中REMARK列中含有WN.wind.wlr中表名和数量 de ...

  2. Oracle迁移到mysql字符集_oracle数据库字符集characterset迁移及变更系列一

    背景 oracle数据库字符集和应用数据密切相关,数据库迁移也会涉及到数据库字符集的转换,大家常常听到的乱码之类的,导出导入表发生列长度不足的错误,也和数据库字符集不无关系, 本文我沿袭前文:http ...

  3. oracle数据物理结构包括,Oracle数据库的物理结构介绍

    Oracle数据库现以发展最为抢手,那么你对它的实际应用以及相关功能特性了解的又有多少呢?以下的文章主要是向你介绍Oracel的初步认识,你如果是Oracle数据库的疯狂一族的话,以下的文章,你一定不 ...

  4. 彻底删除oracle数据,彻底删除Oracle数据库的方法

    1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 2.打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS ...

  5. oracle数据文件离线,oracle数据库的文件在哪里

    Oracle体系结构 Oracle 服务器由Oracle实例与Oracle数据库组成 Oracle实例(instance),通过ORACLE_SID来引导(Oracle标识) 单实例情况下:Oracl ...

  6. oracle数据备份 full,oracle数据库备份 full

    通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库) 通过exp命令可以对Oracle数据库进行备份操作,其命令含义是:exp 用户名/密码@数据库所在ip ...

  7. Oracle数据二进制传输,Oracle数据库插入二进制字段数据

    oracle数据库喜欢搞特殊,二进制字段数据不能直接插入,需先再该字段插入oracle函数返回的的初始数据,然后在查询更新该字段.下面以Blob字段类型为例: 1.插入初始数据 Class.forNa ...

  8. 数据库oracle数据导入导出命令,数据库oracle数据导入导出命令

    exp Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成 ...

  9. oracle数据插入覆盖,oracle数据库覆盖导入

    oracle数据库备份(导入导出dmp)_IT/计算机_专业资料.包括远程连接 ... oracle数据库导入导出命令_计算机软件及应用_IT/计算机_专业资料.Oracle 数据导入导出 imp/e ...

最新文章

  1. java case or_java – 在CriteriaBuilder中使用子句和’case w...
  2. ASP.NET Core [1]:Hosting(笔记)
  3. 5918. 统计字符串中的元音子字符串
  4. 更改Sharepoint管理中心端口号
  5. 如何假装自己读懂了《时间简史》
  6. 在.NET中实现观察者模式(3种技术)
  7. 技术圈几个牛逼的公号推荐给大家
  8. java多线程--信号量Semaphore的使用
  9. 个人IP网站源码 适合做个人主页和工作室网站
  10. Linux内核启动过程
  11. 【Natural Language Processing】语言模型(Language Modeling)
  12. bootstrap怎么强制不换行_Bootstrap方法的软件实现
  13. vue实现在canvas画布上实现绘制涂抹功能
  14. 【智能手环APP for Android 】01 百度地图展示行动轨迹
  15. 华硕FL8000U拆换机械硬盘
  16. ###好好好###异质信息网络分析与应用综述(石川)--阅读
  17. 基于python的微博热搜爬取及数据分析
  18. db2 SEQUENCE
  19. The run destination iPhone is not valid for running the scheme “xx”
  20. xml 转json 传输

热门文章

  1. Neo4j数据导入null property value
  2. VirusTotal api 在 python 中的 URL,域名使用
  3. K3s部署rancher
  4. 用python解决养兔子趣味问题
  5. 我们采访了这些游戏大神,这是他们给新人的建议
  6. MACE的环境搭建和工程构建
  7. 锁屏界大亨零花是如何吸引千万用户追捧的?
  8. Jmeter参数传递方式(token传递,接口关联等)
  9. 左、右、内、自然连接
  10. C PUZZLE中的一道题