oracle中的数据库乱码的原因与解决在SQL*Plus中用insert *** 的都是中文的 为什么一存入服务器后 再select出的就是???有的时候 服务器数据先导出 重装服务器 再导入数据 结果 发生数据查询成??? …… 这些问题 一般是因为字符集设置不对造成的 很久以来 字符集一直是困扰著众多Oracle爱好者的问题 笔者从事Oracle数据库管理和应用已经几年如何解决oracle乱码了 经常接到客户的类似上面提到的有关数据库字符集的 告急 和 求救 在此如何解决oracle乱码我们就这个问题做一些分析和探讨 首先 我们要明确什么是字符集如何解决oracle乱码?字符集是一个字节数据的解释的符号集合 有大小之分 有相互的包括关系 如us ascii就是zhs gbk的子集 从us ascii到zhs gbk不会有数据解释上的问题 不会有数据丢失 Oracle对这种问题也要求从子集到超集的导出受支持 反之不行 在所有的字符集中utf 应该是最大 因为它基于unicode 双字节保存字符(也因此在存储空间上占用更多) 其次 一旦数据库创建后 数据库的字符集是不能改变的 因此 在设计和安装之初考虑使用哪一种字符集是十分重要的 数据库字符集应该是操作系统本地字符集的一个超集 存取数据库的客户使用的字符集将决定选择哪一个超集 即数据库字符集应该是所有客户字符集的超集 在实际应用中 和字符集问题关系最大的恐怕就是exp/imp如何解决oracle乱码了 在做exp/imp时 如果Client 和Server的nls_lang设置是一样的 一般就没有问题的 但是 要在两个不同字符集的系统之间导数据就经常会有这样或那样的问题 如 导出时数据库的显示正常 是中文 当导入到其如何解决oracle乱码他系统时 就成了乱码 这也是一类常见问题 现在 介绍一些与字符集有关的NLS_LANG参数NLS_LANG格式NLS_LANG = language_territory charset 有三个组成部分(语言 地域和字符集) 每个成分控制了NLS子集的特性 其中 language 指定服务器消息的语言 territory 指定服务器的日期和数字格式 charset 指定字符集例如AMERICAN_AMERICA US SCII AMERICAN _ AMERICA ZHS GBK还有一些子集可以更明确定义NLS_LANG参数DICT BASE 数据字典基本 表版本 DBTIMEZONE 数据库时区 NLS_LANGUAGE 语言 NLS_TERRITORY 地域 NLS_CURRENCY 本地货币字符 NLS_ISO_CURRENCY ISO货币字符 NLS_NUMERIC_CHARACTERS 小数字符和组 分隔开 NLS_CHARACTERSET 字符集 NLS_CALENDAR 日历系统 NLS_DATE_FORMAT 缺省的日期格式 NLS_DATE_LANGUAGE 缺省的日期语言 NLS_SORT 字符排序序列 NLS_TIME_FORMAT 时间格式 NLS_TIMESTAMP_FORMAT 时间戳格式 ……通过props$动态性能视图 我们可以查看数据库的字符集信息$ sqlplus internal SQL desc props$ Name Type Nullable Default Comments NAME VARCHAR ( ) VALUE$ VARCHAR ( ) Y MENT$ VARCHAR ( ) Y SQL set arraysize SQL col value$ format a SQL select name value$ from props$ where name= NLS_CHARACTERSET ; NAME VALUE$ NLS_CHARACTERSET ZHS GBK SQL select * from sys props$; NAME VALUE$ DICT BASE DBTIMEZONE : NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS NLS_CHARACTERSET ZHS GBK NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD MON RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH MI SSXFF AM NLS_TIMESTAMP_FORMAT DD MON RR HH MI SSXFF AM NLS_TIME_TZ_FORMAT HH MI SSXFF AM TZH:TZM NLS_TIMESTAMP_TZ_FORMAT DD MON RR HH MI SSXFF AM TZH:TZM NLS_DUAL_CURRENCY $ NLS_P BINARY NLS_NCHAR_CHARACTERSET ZHS GBK NLS_RDBMS_VERSION NAME VALUE$ GLOBAL_DB_NAME SCPDB EXPORT_VIEWS_VERSIONrows selected SQL从结果可以看出NLS_LANG = AMERICAN _ AMERICA ZHS GBK 虽然 数据库的字符集是在create database的时候指定的 以后不允许改变 但在一个已经建立好的数据库上 我们可以通过修改SYS PROPS$来修改主要是对应客户端的显示 与存储无关 如 SQL conn / as sysdba Connected SQL SQL select * from sys props$WHERE NAME= NLS_LANGUAGE ; NAME VALUE$ NLS_LANGUAGE AMERICAN SQL SQL UPDATE sys PROPS$ SET VALUE$= SIMPLIFIED CHINESEWHERE NAME= NLS_LANGUAGE ;row updated SQL SQL select * from sys props$WHERE NAME= NLS_LANGUAGE ; NAME VALUE$ NLS_LANGUAGE SIMPLIFIED CHINESE SQL通常出现问题的原因 可分为三种服务器指定字符集与客户字符集不同 而与加载数据字符集一致 解决方法 对于这种情况 只需要设置客户端字符集与服务器端字符集一致就可以了 具体操作如下 * 查看当前字符集 SQL select * from sys props$WHERE NAME= NLS_CHARACTERSET ; NAME VALUE$ NLS_CHARACTERSET ZHS GBK SQL 可以看出 现在服务器端Oracle数据库的字符集为 ZHS GBK * 根据服务器的字符集在客户端作相应的配置或者安装Oracle的客户端软件时指定 如果还没安装客户端 那么在安装客户端时 指定与服务器相吻合的字符集即可 如果已经安装好了客户端 并且客户端为 sql*net 以下版本 进入Windows的系统目录 编辑oracle ini文件 用US ASCII替换原字符集 重新启动计算机 设置生效 否则 如果 客户端为 sql*net 以上版本 在Win 下 运 行REGEDIT 第一步选HKEY_LOCAL_MACHINE 第二步选择SOFARE 第三步选择 Oracle 第四步选择 NLS_LANG 键 入 与服 务 器 端 相 同 的 字 符 集 (本例为 HKEY_LOCAL_MACHINE\ SOFARE\ORACLE\NLS_LANG AMERICAN _ AMERICA ZHS GBK)如果是UNIX客户端 则SQL conn / as sysdba Connected SQL SQL UPDATE sys PROPS$ SET VALUE$= SIMPLIFIED CHINESEWHERE NAME= NLS_LANGUAGE ;row updated SQL MIT; Commit plete SQL服务器指定字符集与客户字符集相同 与加载数据字符集不一致 解决方法 强制加载数据字符集与服务器端字符集一致 要做到这一点 可以通过重新创建数据库 并选择与原卸出数据一致的字符集 然后IMP数据 这种情况仅仅适用于空库和具有同一种字符集的数据 解决这类问题 也可以先将数据加载到具有相同字符集的服务器上 然后用转换工具卸出为foxbase 格式或access格式数据库 再用转换工具转入到不同字符集的Oracle数据库中 这样就避免了Oracle字符集的困扰 目前数据库格式转换的工具很多 像power builder 以上版本提供的pipeline及Microsoft Access数据库提供的数据导入/导出功能等服务器指定字符集与客户字符集不同 与输入数据字符集不一致 对于这种情况 目前为止都还没有太好的解决方法 通过上面的了解 我们知道 导致在后期使用数据库时出现种种关于字符集的问题 多半是由于在数据库设计 安装之初没有很好地考虑到以后的需要 所以 我们完全可以通过在服务器上和客户端使用相同的字符集来避免由此类问题引出的麻烦 lishixinzhi/Article/program/Java/hx/201311/27019
ORACLE显示中文为乱码 , 怎么修改?在Redhat上安装Oracle10g没有设定字符集,采用的是操作系统默认字符集:WE8ISO8859P1,将字符集修改为:ZHS16GBK 。由于过程不可逆 , 首先需要备份数据库 。\x0d\x0a1.数据库全备\x0d\x0a\x0d\x0a2.查询当前字符集\x0d\x0aSQLselect*fromnls_database_parameterswhereparameter='NLS_CHARACTERSET';\x0d\x0aPARAMETERVALUE\x0d\x0a--------------------------------------------------------------------------------\x0d\x0aNLS_CHARACTERSETWE8ISO8859P1\x0d\x0a\x0d\x0a3.关闭数据库\x0d\x0aSQLshutdownimmediate\x0d\x0aDatabaseclosed.\x0d\x0aDatabasedismounted.\x0d\x0aORACLEinstanceshutdown.\x0d\x0a\x0d\x0a4.启动数据库到mount状态\x0d\x0aSQLstartupmount\x0d\x0aORACLEinstancestarted.\x0d\x0aTotalSystemGlobalArea205520896bytes\x0d\x0aFixedSize1266608bytes\x0d\x0aVariableSize100666448bytes\x0d\x0aDatabaseBuffers100663296bytes\x0d\x0aRedoBuffers2924544bytes\x0d\x0aDatabasemounted.\x0d\x0a\x0d\x0a5.限制session\x0d\x0aSQLaltersystemenablerestrictedsession;\x0d\x0aSystemaltered.\x0d\x0a\x0d\x0a6.查询相关参数并修改\x0d\x0aSQLshowparameterjob_queue_processes;\x0d\x0aNAMETYPEVALUE\x0d\x0a-----------------------------------------------------------------------------\x0d\x0ajob_queue_processesinteger10\x0d\x0a\x0d\x0aSQLshowparameteraq_tm_processes;\x0d\x0aNAMETYPEVALUE\x0d\x0a-----------------------------------------------------------------------------\x0d\x0aaq_tm_processesinteger0\x0d\x0a\x0d\x0aSQLaltersystemsetjob_queue_processes=0;\x0d\x0aSystemaltered.\x0d\x0a\x0d\x0a7.打开数据库\x0d\x0aSQLalterdatabaseopen;\x0d\x0aDatabasealtered.\x0d\x0a\x0d\x0a8.修改字符集\x0d\x0aSQLalterdatabasecharactersetZHS16GBK;\x0d\x0aalterdatabasecharactersetZHS16GBK\x0d\x0a*\x0d\x0aERRORatline1:\x0d\x0aORA-12712:newcharactersetmustbeasupersetofoldcharacterset\x0d\x0a\x0d\x0a出现错误提示 , 新字符集必须是老字符集的超集,也就原来字符集是新字符集的子集 , 可以再Oracle官方文档上查询字符集包含关系 。下面使用Oracle内部命令internal_use,跳过超集检查 , 生产环境不建议使用此方法 。\x0d\x0a\x0d\x0aSQLalterdatabasecharactersetinternal_useZHS16GBK;\x0d\x0aDatabasealtered.\x0d\x0a\x0d\x0a9.查询当前字符集\x0d\x0aSQLselect*fromnls_database_parameterswhereparameter='NLS_CHARACTERSET';\x0d\x0aPARAMETERVALUE\x0d\x0a--------------------------------------------------------------------------------\x0d\x0aNLS_CHARACTERSETZHS16GBK\x0d\x0a\x0d\x0a10.关闭数据库\x0d\x0aSQLshutdownimmediate\x0d\x0aDatabaseclosed.\x0d\x0aDatabasedismounted.\x0d\x0aORACLEinstanceshutdown.\x0d\x0a\x0d\x0a11.启动数据库到mount状态\x0d\x0aSQLstartupmount\x0d\x0aORACLEinstancestarted.\x0d\x0aTotalSystemGlobalArea205520896bytes\x0d\x0aFixedSize1266608bytes\x0d\x0aVariableSize100666448bytes\x0d\x0aDatabaseBuffers100663296bytes\x0d\x0aRedoBuffers2924544bytes\x0d\x0aDatabasemounted.\x0d\x0a\x0d\x0a12.将相关参数改回原来值\x0d\x0aSQLaltersystemsetjob_queue_processes=10;\x0d\x0aSystemaltered.\x0d\x0a\x0d\x0a13.打开数据库\x0d\x0aSQLalterdatabaseopen;\x0d\x0aDatabasealtered.
解决plsql链接oracle查询出汉字显示为乱码的问题1.首先通过SQL语句:
select userenv('language') from dual;
查询出服务器端的编码,如我自己的查询结果为:
USERENV('LANGUAGE')
AMERICAN_AMERICA.ZHS16GBK
2.添加环境变量NLS_LANG ,值为: AMERICAN_AMERICA.ZHS16GBK,由此即可解决该问题 。
oracle数据库乱码怎么解决一、pl/sql developer 中文字段显示乱码
原因如何解决oracle乱码:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的 。
二、查看和修改oracle数据库字符集如何解决oracle乱码:
select userenv('language') from dual;
【如何解决oracle乱码 oracle sysguid乱码】查询结果:
SIMPLIFIED CHINESE_CHINA.AL32UTF8
--修改oracle数据库字符集:(在SQL Plus中)
sql conn / as sysdba;
sql shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
sql startup mount;
oracle instance started.
total system global area135337420 bytes
fixed size452044 bytes
variable size109051904 bytes
database buffers25165824 bytes
redo buffers667648 bytes
database mounted.
sql alter system enable restricted session;
system altered.
sql alter system set job_queue_processes=0;
如何解决oracle数据库因字符集出现的乱码问题oracle数据库查询时出现乱码如何解决oracle乱码,很可能是该数据库的字符集设定不支持中文如何解决oracle乱码,但是表中数据含有中文,所以变为乱码 。
如果是字符集原因,解决方法如下:
1、shutdown immediate;关闭数据库
2、startup mount; 开启数据库至挂载模式(只挂实例,不启动数据库)
3、alter system enable restricted session;开启会话限制
4、alter system set aq_tm_processes=0;修改系统参数
5、alter system set job_queue_processes=0;修改系统参数
6、alter database open;启动数据库为open
7、alter database national character set internal_user (zhs16gbk);修改字符集
8、alter system disable restricted session;关闭会话限制
括号内可填写字符集类型,zhs16gbk、AL32UTF8等字符集都支持中文 。
如何解决oracle乱码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle sysguid乱码、如何解决oracle乱码的信息别忘了在本站进行查找喔 。
推荐阅读
- 直播运营脚本表格,带货直播脚本表格
- php无需数据库网盘,php数据库
- 做影视剪辑配置什么cpu,影视剪辑用什么配置笔记本电脑
- word如何交卷,怎么在word上做试卷
- mysql怎么取重复记录 mysql 重复
- 斗龙下载,斗龙云下载最新版本下载
- 电脑右下角a3是什么意思,电脑右下角a2
- 玩逆战需要什么cpu,玩逆战需要什么网络好
- go语言机器人编程 go 编程语言