查询数据库表某字段含“乱码”的数据的一个方法
公司主营业务:网站设计制作、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出蕉城免费做网站回馈大家。
说明:
在某些情况下,由于字符集不兼容等问题,数据库中的记录可能存在“乱码”,本文就是介绍一个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
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这个查询乱码数据的方法,是你先要知道这个乱码是怎么产生的,然后才能够去找到原因
1、对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
2、去掉注释符#,同时将其修改为
SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
3、对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为
SQLPLUS_SYSTEMROOT=d:\\WINNT。
对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
4、修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。
问题: 使用Oracle Instant Client 出现 ORA-12705: Cannot access NLS data files or invalid environment specified 错误。
如果是Windows平台,注册表里 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 查找键 NLS_LANG,这个键由Oracle标准客户端安装创建, 值是 NA 。这个导致了 ORA-12705错误。解决方法就是改名 NLS_LANG。
Linux下 如果环境变量 NLS_LANG 值是NA 会引起 ORA-12705 错误,解决方法是删除这个变量
unset NLS_LANG
1、首先,Oracle查询编码:select * from v$nls_parameters;//看看是否GBK
2、如果是用Servlet或者别的,插入数据之前输出一下,看看是否乱码。
比如:
doPost()
//设置接受编码,但你的页面也必须是UTF-8
response.setContentType("text/html;charset=UTF-8");
doGet()
//下面方式转一下码
String username = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");
打开PLSQL
请点击输入图片描述
弹出登陆界面,进去登陆
请点击输入图片描述
随便写了一个查询语句,发现显示有乱码
请点击输入图片描述
解决办法:
先查看oracle服务器端的字符编码是什么
请点击输入图片描述
配置一个环境变量就可以解决问题
变量名称:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
按照下面图是
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
加好环境变量之后关闭PLSQL重新打开,写一个查询试试效果
如下图所示说明乱码问题解决。
请点击输入图片描述