转自:https://www.cnblogs.com/perilla/p/3873653.html

一、什么是Oracle字符集

Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响Oracle数据库字符集最重要的参数是NLS_LANG参数。

它的格式如下: NLS_LANG = language_territory.charset

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

其中:

Language: 指定服务器消息的语言, 影响提示信息是中文还是英文

Territory: 指定服务器的日期和数字格式,

Charset:  指定字符集。

如:AMERICAN _ AMERICA. ZHS16GBK

从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

怎么查看数据库版本

select * from v$version   包含版本信息,核心版本信息,位数信息(32位或64位)等  至于位数信息,在Linux/unix平台上,可以通过file查看,如file $ORACLE_HOME/bin/oracle

二、查看数据库字符集

涉及三方面的字符集,

1. oracel server端的字符集;

2. oracle client端的字符集;

3. dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

2.1 查询oracle server端的字符集

有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

----------------------------------------------------

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>select userenv(‘language’) from dual;

AMERICAN _ AMERICA. ZHS16GBK

2.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也可以得到它对应的字符集。

2.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端相同的字符集。

补充:

(1).数据库服务器字符集

select * from nls_database_parameters

来源于props$,是表示数据库的字符集。

(2).客户端字符集环境

select * from nls_instance_parameters

其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

(3).会话字符集环境

select * from nls_session_parameters

来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。

如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表> 参数文件> 数据库默认参数

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

三、修改server端字符集(不建议使用)

0.连接数据库

sqlplus   /nolog

sql> conn /as sysdba

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 AL16UTF16;

--如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测

SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;

SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start) 按上面的做法就可以。

oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集相关推荐

  1. 转oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集

    2016年02月01日 09:32:12 攻城记 阅读数 12296 问题: 一个汉字用GBK存放是2个字符,用AL32UTF8占用3个字符,问题来了: 一个字段A varchar2(10)存放了5个 ...

  2. oracle11g字符集区别,Oracle11g字符集AL32UTF8修改为ZHS16GBK详解【转】

    ------感谢作者,确实解决了问题.分享下,希望帮到更多人 此问题发生在数据库迁移过程中.源数据库:自己笔记本上win7 64位系统的oracle11g个人版,字符集ZHS16GBK :目标数据库, ...

  3. Oracle11g字符集AL32UTF8修改为ZHS16GBK详解

    此问题发生在数据库迁移过程中.源数据库:自己笔记本上win7 64位系统的oracle11g个人版,字符集ZHS16GBK :目标数据库,HP的sqlserver2008 系统 64位数据库服务器,字 ...

  4. linux 查看oracle数据库字符集,Oracle字符集的查看查询和Oracle字符集的设置修改

    三. 修改Oracle的字符集 8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误. Startup nomount; A ...

  5. oracle 字符集修改方案,Oracle数据库字符集问题解决方案大全

    在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比 较多.ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉 字信息的显示方面着实给中国用户带来不少麻烦,笔 ...

  6. 理解ORACLE数据库字符集

    一.引言     ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化 ...

  7. ORACLE数据库字符集

    ORACLE数据库字符集 一.字符集基本知识 二.查询oracle server端的字符集 三.修改oracle的字符集 字符集基本知识 1.基本认知 ORACLE数据库字符集,即Oracle全球化支 ...

  8. 关于Oracle数据库字符集的选择及乱码情况

    关于Oracle数据库字符集的选择及乱码情况 背景: 在项目上,开发人员在安装Oracle数据库时采用的默认的编码集,导致后期正式运行时出现某些生僻字和中文符号. 出现乱码.出现的情况就是某些生僻字或 ...

  9. oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三

    背景 本文主要熟悉下如何用csscan以及csalter脚本变更数据库字符集,进一步理解如何调整数据库字符集的知识. 之前的相关文章链接: oracle10g_csscan_更变数据库字符集及国家字符 ...

最新文章

  1. STL中的map、unordered_map、hash_map
  2. WPF学习笔记(03) - 华丽的HelloWorld
  3. Split和Substring的用法
  4. Spark入门-了解Spark核心概念
  5. 使用Spring Boot Operator部署SpringBoot到K8S
  6. 【原创】brew 和 brew cask
  7. selenuim webDriver API 16种定位方式
  8. 备份数据库的expdp语句_Oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍...
  9. Learn Python the hard way, ex40 字典,可爱的字典
  10. paip.调用GUI接口.
  11. 以太网设计FAQ:以太网MAC和PHY
  12. “老三论”与“新三论”
  13. 新媒体运营,微博平台运用技巧分享
  14. 无座火车票为什么不能半价?
  15. uni-app获取设备序列号SERIAL
  16. 阿里面试应该注意什么?通过5轮面试的阿里实习生亲述
  17. Android Studio 实验三:水果店
  18. FFmpeg再学习 -- 将 jpeg 转成 mp4
  19. 当前时间与GMT时间转换
  20. 查看U盘占用程序的方法

热门文章

  1. nssl 1454 2018CodeM总决赛 最短路
  2. 营销理论扫盲贴:4P/4C/4R/4S
  3. 荣耀智慧屏鸿蒙远程控制电脑,荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视...
  4. 【DB笔试面试639】在Oracle中,什么是多列统计信息(Extended Statistics)?
  5. md5 java 实现_MD5加密的Java实现
  6. haproxy中的Proxies段的配置
  7. 唯链瞄准数十亿美元中国宠物食品可追溯性市场
  8. TECS——ArduPilot——代码框架理解
  9. MacPS安装服务器当前无响应,MAC版 PS安装插件提示未部署处理方式
  10. flex布局之插件 超级好用