2019独角兽企业重金招聘Python工程师标准>>>

1,查Oracle数据库创建时候的字符集: Oracle服务器端执行 SQL> select name, value$ from sys.props$ where name like 'NLS%'; NAME VALUE$ ------------------------------ ---------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET UTF8 NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NAME VALUE$ ------------------------------ ---------------------------------------- NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 10.2.0.4.0 20 rows selected. 确认数据库创建的时候选择的字符集是 UTF-8 .执行sql :select userenv('language') from dual; 获取oracle服务端字符集X SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------- SIMPLIFIED CHINESE_CHINA.UTF8 2. 检查执行 sqlldr 的客户端的 NLS_LANG 的设置 Oracle 客户端执行 [oracle @localhost hx]$ echo $NLS_LANG AMERICAN_AMERICA.UTF8 3. 尽量让以上3个步骤检查出的字符集设置都一致,开始通过 sqlldr 导入文本,并检查结果。 通常出现问题的原因,可分为三种: 1. 服务器指定字符集与客户字符集不同,而与加载数据字符集一致。 解决方法:对于这种情况,只需要设置客户端字符集与服务器端字符集一致就可以了 oracle10g UTF8编码:AMERICAN_AMERICA.AL32UTF8 GBK编码:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 客户端修改为中文是:在linux的终端上设置环境变量 1.LANG=zh_CN 2.NLS_LANG=zhs16gbk 2. 服务器指定字符集与客户字符集相同,与加载数据字符集不一致。 解决方法:强制加载数据字符集与服务器端字符集一致。 3. 服务器指定字符集与客户字符集不同,与输入数据字符集不一致。 对于这种情况,目前为止都还没有太好的解决方法。 其中有的时候可以尝试通过iconv -f utf-8 -t gbk filename 从原字符集 utf-8 转换成 gbk 修改数据库端字符集的方法:   1.服务器端字符集的设置和修改: 1.1 创建数据库的时候直接选择正确的字符集(显示汉字的字符集主要有ZHS16CGB231280,US7ASCII,WE8ISO8859P1,ZHS16GBK等) 1.2如果创建的时候没有选择字符集,那么字符集将使用默认的字符集.可以使用如下命令查看数据库的字符集.用oracle的合法用户登录.select * from V$NLS_PARAMETERS. SQL > select * from V$NLS_PARAMETERS parameter value NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA …. …. NLS_CHARACTERSET WE8ISO8859P1 NLS_SORT BINARY NLS_NCHAR_CHARACTERSET WE8ISO8859P1 ---- 从上述信息看出ORACLE 数据库的字符集为' WE8ISO8859P1'。 可以用update 命令修改数据库的字符集,但是注意:修改字符集可能会对原有数据造成破坏,修改之前一定要先备份数据库.命令如下: 用户sys 以sysdba的身份登录oracle. 字串9 SQL>update props$ set value$=’ZHS16GBK’ where name=’NLS_CHARACTERSET’ 如果客户端的字符集和服务器端不相同,就必须修改字符集.否则不能正确的显示汉字.一般建议修改客户端的字符集. 1.3不同字符集数据库之间的数据导入 a)重新安装数据库或者是用update命令修改字符集。 b)强行修改oracle数据库当前字符集。以sysdba的身份登录oracle SQL > create database character set ZHS16GBK (注:这里的字符集为导出数据的字符集) * create database character set ZHS16GBK ERROR at line 1: ORA-01031: insufficient privileges 不用理会这个错误,用imp 装入数据。数据装完后,重启动oracle 数据,select * from V$NLS_PARAMETERS 此时,你会发现,数据库字符集又回到原来的字符集。 c)用第三方工具绕开字符集。如powerbuild的pipeline,delphi的datadump,MS access的数据导入导出工具。 客户端字符集 1、 客户端字符集含义 客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。 2、NLS_LANG 参数格式 NLS_LANG= Language_ Territory. Client character se Language: 显示oracle消息、校验、日期命名 Territory :指定默认日期、数字、货币等格式 Client character set :指定客户端将使用的字符集 例如: NLS_LANG=AMERICAN_AMERICA.US7ASCII AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集 3、 客户端字符集设置方法 1)UNIX 环境 $NLS_LANG=“simplified chinese”_china.zhs16gbk $export NLS_LANG 编辑oracle用户的.profile文件(或.bash_profile linux) $ export NLS_LANG="SIMPLIFIED CHINESE"_CHINA.UTF8 2)Windows 环境 编辑注册表 Regedit.exe HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0 在DOS名下执行: Set NLS_LANG=“simplified chinese”_china.zhs16gbk 4、 NLS 参数查询 Oracle 提供若干NLS参数定制数据库和用户机以适应本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通过查询以下数据字典或v$视图查看。 NLS_DATABASE_PARAMETERS-- 显示数据库当前NLS参数取值,包括数据库字符集取值 NLS_SESSION_PARAMETERS-- 显示由NLS_LANG 设置的参数,或经过alter session 改变后的参数值(不包括由NLS_LANG 设置的客户端字符集) NLS_INSTANCE_PARAMETE-- 显示由参数文件init.ora 定义的参数V$NLS_PARAMETERS--显示数据库当前NLS参数取值 图1-3 查询NLS参数值 5、 修改NLS参数 使用下列方法可以修改NLS参数 (1)修改实例启动时使用的初始化参数文件 (2)修改环境变量 NLS_LANG (3)使用ALTER SESSION语句,在oracle会话中修改 (4)使用某些SQL函数 NLS 作用优先级别:Sql function>alter session>环境变量或注册表>参数文件>数据库默认 SQL*Loader的字符集转换 使用SQL*Loader向数据库装载数据,有两种转换字符集的模式 常规路径: 数据被转换为 NLS_LANG 指定的会话字符集或者控制文件指定的字符集。 控制文件可以指定字符集 SQL*Loader control file: LOAD DATA CHARACTERSET UTF16 INFILE ulcase11.dat REPLACE … 如果数据文件的字符集与NLS_LANG环境变量的字符集不一致,SQL*Loader以NLS_LANG指定的字符集编码存入数据库。 直接路径: 数据使用客户端指示被转换. 这样要求数据库的字符集是数据文件字符集的超级,否则有可能出现乱码。 乱码问题及解决办法 要在客户端正确显示ORACLE数据库中的汉字信息,首先必须使客户端的字符集与服务器端的字符集一致;其次是加载到ORACLE数据库的数据字符集必须与服务器字符集一致。据此,汉字显示乱码的问题大致可以分为以下几种情况: 1、客户端字符集与服务器端字符集不同,服务器端字符集与加载数据字符集一致。 如: 以system用户登录,创建表,插入数据。 图1-4 乱码问题-正确的客户端字符集 图1-5 乱码问题-不一致的客户端字符集 这种情况是最常见的,只要把客户端的字符集设置正确即可。具体解决方案: 第一步:查询V$NLS_DATABASE_PARAMETERS得到服务端的字符集: SQL>SELECT * FROM V$NLS_DATABASE_PARAMETERS WHERE PARAMETER=’ NLS_CHARACTERSET; PARAMETER VALUE ----------------------------------------------------- NLS_CHARACTERSET ZHS16GBK 第二步:根据服务端的字符集设定客户端的字符集,设定方法参见客户端的字符集的设定方式。以LINUX系统为例,可在当前用户的.bash_profile文件中增加如下两行: NLS_LANG=SIMPLIFIED Chinese_CHINA.ZHS16GBK export NLS_LANG 2、客户端字符集与服务器端字符集相同,服务器端字符集与加载数据字符集不一致。这种情况一般发生在ORACLE版本升级或重新安装数据库时选择了与原来数据库不同的字符集,而恢复加载的备份数据仍是按原字符集卸出的场合。另一种情况是加载从其它使用不同字符集的ORACLE数据库卸出的数据。在这两种情况中,不管客户端字符集与服务器端字符集是否一致都无法正确显示汉字。如: 具体解决方案: 方案一:按服务端字符集的修改方法修改服务端字符集与加载数据字符集一致,然后导入数据。 方案二:利用数据格式转储,避开字符集带来的问题。即先将加载数据倒入到与其字符集一致的数据库中,然后再将数据要么按文本格式导出(数据量较小的情况下),要么通过第三方工具(如POWER BUILDER,ACCESS,FOXPRO等)倒出数据,最后将倒出的数据导入到目标数据库中。 3、客户端字符集与服务器端字符集不同,服务端字符集与输入数据字符集不同。这种情况是在客户端字符集与服务器端字符集不一致时,从客户端输入了汉字信息。输入的这些信息即便是把客户端字符集更改正确,也无法显示汉字。 如: 图1-6 乱码问题—错误的客户端字符集 图1-7 乱码问题—正确的客户端字符集 解决方案:修改客户端字符集与服务端字符集一致后,重新输入数据。

转载于:https://my.oschina.net/lxwgmail/blog/111128

sqlldr 导入乱码,Oracle客户端字符集问题相关推荐

  1. oracle客户端改字符集没有用,ORACLE客户端乱码 修改Oracle客户端字符集

    修改Oracle客户端字符集方法: 1:可以通过修改注册表键值永久设置,类似于这样的键值: HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME0下, 如一般的简体中文 nl ...

  2. 设置ORACLE客户端字符集

    1.字符集的一些基本知识     字符集有很多种,最初的字符集是ASCII,由于ASCII支持的字符很有限,因此随后又出现了很多的编码方案,这些编码方案大部分都是包括了ASCII的.EBCDIC编码是 ...

  3. oracle怎么设置字符集,ORACLE系统字符集设置

    like '8011'||lpad(#value#,8,'0')//lpad 函数将8位的值为0的数据替换为value但是其位数不变. 修改Oracle客户端字符集方法: 1:可以通过修改注册表键值永 ...

  4. Oracle的字符集:nls_database_parameters、nls_instance_parameters、nls_session_parameters

    1.字符集命名 Oracle的字符集命名遵循以下命名规则: <Language><bit size><encoding> 即: <语言><比特位数 ...

  5. C#免装oracle客户端查询AMERICAN_AMERICA.US7ASCII字符集 中文乱码解决办法

    服务器linux+oracle,字符集 AMERICAN_AMERICA.US7ASCII 客户端win 开发工具vs 之前研究半天,查询服务器上oracle数据库的中文,因为历史原因服务器字符集为A ...

  6. oracle客户端查看字符集,oracle 中文乱码---查看和修改客户端字符集

    客户端NLS_LANG的设置方法 Windows: # 常用中文字符集set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK # 常用unicode字符集 set ...

  7. 如何处理Oracle客户端查询乱码问题

    From: http://archive.cnblogs.com/a/2074122/ 1,查Oracle数据库创建时候的字符集: Oracle服务器端执行 SQL> select name, ...

  8. oracle 中文导入 乱码 ZHS16GBK AL32UTF8

     转自:http://hi.baidu.com/danghj/blog/item/36a85f10b8dcbdf1c3ce799a.html 1,查Oracle数据库创建时候的字符集: Oracl ...

  9. oracle imp导入修改字符集,Oracle中IMP导入数据时提示字符集不一致解决

    生产环境中经常使用到Oracle的IMP导入和EXP导出来功能来达到数据迁移的目的,通常在源数据库和目标数据库中查询字符集是否致, 测试环境中导入IMP导入报错信息如下: 导入命令如下: [oracl ...

最新文章

  1. Linux正则表达式grep与egrep
  2. angular.animation的使用
  3. 开源Python做的火币和ZB搬砖差价监控程序
  4. xmppframework for iOS client (一) XMPPFramework环境配置
  5. python3 获取cookie解决方案
  6. 在Elasticsearch中索引Java Bean的简单方法
  7. 网络事件触发自己主动登录
  8. LeetCode: Word Search
  9. php 社区,社区(phpmysql)一
  10. 网页中的QQ和阿里旺旺聊天图标
  11. C++取字符串长度函数三种方法
  12. 2016年360校招笔试题
  13. 不支持:http://javax.xml.XMLConstants/property/accessExternalStylesheet
  14. 蛙蛙推荐:蛙蛙牌网页捕捉器
  15. Kotlin 找素数/质数
  16. python网络爬虫从入门到实践 第5章 (二)
  17. 职场中的服务 —— 满足心理诉求
  18. C++餐厅点餐结算系统
  19. 手机android player病毒怎么解决,不要担心手机中毒!教您一些有关如何彻底清除Android手机上的病毒的提示...
  20. 可免费下载的最新人民日报分词语料库(NEPD)发布(转载)

热门文章

  1. 【AtCoder】AGC017
  2. mysql 和 sqlserver sql差异比较
  3. POJ 1811 Prime Test (Rabin-Miller强伪素数测试 和Pollard-rho 因数分解)
  4. tensorflow的一些函数
  5. Linux 安装loadrunner 碰到的问题
  6. window.history 和 DWZ 框架
  7. 『程序员』 [程序人生]程序员几种不同的境界
  8. 使用CocoaPods导入百度地图SDK所遇到的坑
  9. 重载(overload)与重写(override)的区别
  10. SEO优化---学会建立高转化率的网站关键词库