oracle中的数据库乱码的原因与解决在SQL*Plus中用insert *** 的都是中文的 为什么一存入服务器后 再select出的就是???有的时候 服务器数据先导出 重装服务器 再导入数据 结果 发生数据查询成??? …… 这些问题 一般是因为字符集设置不对造成的 很久以来 字符集一直是困扰著众多Oracle爱好者的问题 笔者从事Oracle数据库管理和应用已经几年了 经常接到客户的类似上面提到的有关数据库字符集的 告急 和 求救 在此我们就这个问题做一些分析和探讨 首先 我们要明确什么是字符集?字符集是一个字节数据的解释的符号集合 有大小之分 有相互的包括关系 如us ascii就是zhs gbk的子集 从us ascii到zhs gbk不会有数据解释上的问题 不会有数据丢失 Oracle对这种问题也要求从子集到超集的导出受支持 反之不行 在所有的字符集中utf 应该是最大 因为它基于unicode 双字节保存字符(也因此在存储空间上占用更多) 其次 一旦数据库创建后 数据库的字符集是不能改变的 因此 在设计和安装之初考虑使用哪一种字符集是十分重要的 数据库字符集应该是操作系统本地字符集的一个超集 存取数据库的客户使用的字符集将决定选择哪一个超集 即数据库字符集应该是所有客户字符集的超集 在实际应用中 和字符集问题关系最大的恐怕就是exp/imp了 在做exp/imp时 如果Client 和Server的nls_lang设置是一样的 一般就没有问题的 但是 要在两个不同字符集的系统之间导数据就经常会有这样或那样的问题 如 导出时数据库的显示正常 是中文 当导入到其他系统时 就成了乱码 这也是一类常见问题 现在 介绍一些与字符集有关的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怎么查乱码数据ORACLE这个查询乱码数据的方法,是你先要知道这个乱码是怎么产生的 , 然后才能够去找到原因
oracle数据库表中某个字段已存在汉字乱码,怎样查找出这些乱码数据 , 查询数据库表某字段含“乱码”的数据的一个方法
说明:
在某些情况下,由于字符集不兼容等问题,数据库中的记录可能存在“乱码”,本文就是介绍一个SQL语句把乱码的记录找到 。
什么是“乱码”
这是首先需要明确的 , 其实如果数据库记录了“半个汉字”实际他只会记录一个“?”(Oracle),如果记录的乱码恰好变成另外一个“汉字”和残余字符,那这个新的“汉字”是不能用下面的方法找出来的 。
适用范围
查找记录中是否含有ascii码(特别是“?”)的方式找到“乱码”的记录 。
SQL模板
Select
*
from
Table_A
t
Where
instr(Name,chr(1))0
or
instr(Name,chr(2))0
or
instr(Name,chr(3))0
or
instr(Name,chr(4))0
or
instr(Name,chr(5))0
or
instr(Name,chr(6))0
or
instr(Name,chr(7))0
or
instr(Name,chr(8))0
or
instr(Name,chr(9))0
or
instr(Name,chr(10))0
or
instr(Name,chr(11))0
or
instr(Name,chr(12))0
or
instr(Name,chr(13))0
or
instr(Name,chr(14))0
or
instr(Name,chr(15))0
or
instr(Name,chr(16))0
or
instr(Name,chr(17))0
or
instr(Name,chr(18))0
or
instr(Name,chr(19))0
or
instr(Name,chr(20))0
or
instr(Name,chr(21))0
or
instr(Name,chr(22))0
or
instr(Name,chr(23))0
or
instr(Name,chr(24))0
or
instr(Name,chr(25))0
or
instr(Name,chr(26))0
or
instr(Name,chr(27))0
or
instr(Name,chr(28))0
or
instr(Name,chr(29))0
or
instr(Name,chr(30))0
or
instr(Name,chr(31))0
or
instr(Name,chr(32))0
or
instr(Name,chr(33))0
or
instr(Name,chr(34))0
or
instr(Name,chr(35))0
or
instr(Name,chr(36))0
or
instr(Name,chr(37))0
or
instr(Name,chr(38))0
or
instr(Name,chr(39))0
or
instr(Name,chr(40))0
or
instr(Name,chr(41))0
or
instr(Name,chr(42))0
or
instr(Name,chr(43))0
or
instr(Name,chr(44))0
or
instr(Name,chr(45))0
or
instr(Name,chr(46))0
or
instr(Name,chr(47))0
or
instr(Name,chr(48))0
or
instr(Name,chr(49))0
or
instr(Name,chr(50))0
or
【oracle如何识别乱码 查oracle编码格式】instr(Name,chr(51))0
or
instr(Name,chr(52))0
or
instr(Name,chr(53))0
or
instr(Name,chr(54))0
or
instr(Name,chr(55))0
or
instr(Name,chr(56))0
or
instr(Name,chr(57))0
or
instr(Name,chr(58))0
or
instr(Name,chr(59))0
or
instr(Name,chr(60))0
or
instr(Name,chr(61))0
or
instr(Name,chr(62))0
or
instr(Name,chr(63))0
or
instr(Name,chr(64))0
or
instr(Name,chr(65))0
or
instr(Name,chr(66))0
or
instr(Name,chr(67))0
or
instr(Name,chr(68))0
or
instr(Name,chr(69))0
or
instr(Name,chr(70))0
or
instr(Name,chr(71))0
or
instr(Name,chr(72))0
or
instr(Name,chr(73))0
or
instr(Name,chr(74))0
or
instr(Name,chr(75))0
or
instr(Name,chr(76))0
or
instr(Name,chr(77))0
or
instr(Name,chr(78))0
or
instr(Name,chr(79))0
or
instr(Name,chr(80))0
or
instr(Name,chr(81))0
or
instr(Name,chr(82))0
or
instr(Name,chr(83))0
or
instr(Name,chr(84))0
or
instr(Name,chr(85))0
or
instr(Name,chr(86))0
or
instr(Name,chr(87))0
or
instr(Name,chr(88))0
or
instr(Name,chr(89))0
or
instr(Name,chr(90))0
or
instr(Name,chr(91))0
or
instr(Name,chr(92))0
or
instr(Name,chr(93))0
or
instr(Name,chr(94))0
or
instr(Name,chr(95))0
or
instr(Name,chr(96))0
or
instr(Name,chr(97))0
or
instr(Name,chr(98))0
or
instr(Name,chr(99))0
or
instr(Name,chr(100))0
or
instr(Name,chr(101))0
or
instr(Name,chr(102))0
or
instr(Name,chr(103))0
or
instr(Name,chr(104))0
or
instr(Name,chr(105))0
or
instr(Name,chr(106))0
or
instr(Name,chr(107))0
or
instr(Name,chr(108))0
or
instr(Name,chr(109))0
or
instr(Name,chr(110))0
or
instr(Name,chr(111))0
or
instr(Name,chr(112))0
or
instr(Name,chr(113))0
or
instr(Name,chr(114))0
or
instr(Name,chr(115))0
or
instr(Name,chr(116))0
or
instr(Name,chr(117))0
or
instr(Name,chr(118))0
or
instr(Name,chr(119))0
or
instr(Name,chr(120))0
or
instr(Name,chr(121))0
or
instr(Name,chr(122))0
or
instr(Name,chr(123))0
or
instr(Name,chr(124))0
or
instr(Name,chr(125))0
or
instr(Name,chr(126))0
or
instr(Name,chr(127))0
oracle数据库乱码怎么解决一、pl/sql developer 中文字段显示乱码
原因:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的 。
二、查看和修改oracle数据库字符集:
select userenv('language') from dual;
查询结果:
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编码格式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- thinkphp网页微信用户登录,html微信登录
- 周建设区块链1334,区块链周老师
- 山上的人直播录屏怎么录,山上的人直播录屏怎么录视频
- mysql数据库怎么分析 mysql分析sql
- 疖如何引流,疖肿引流是什么意思
- 手机自带虚拟空间有什么用,虚拟手机空间的软件叫什么
- 免费歌曲下载mp3,下载mp3歌曲免费下载
- 怎么把数组存入mysql 怎么把数组存入文件
- thinkphp5runtime权限,thinkphp授权系统