问题描述web界面乱码,厂商给我一个sql文件,需要新建用户,然后新建表空间,然后执行人家的sql文件,刚开始什么没注意字符集问题直接执行了,很顺利的执行成功,然后启动tomcat,web界面居然乱码了! 环境介绍:contos 6.9 +oracle 11g 数据库的字符集为: SQL> select userenv('language') nls_lang from dual; NLS_LANG ---------------------------------------------------- AMERICAN_AMERICA.ZHS16GBK 解决办法:思路:需要保证数据库和tomcat的字符集保证一致,然后设置Oracle用户的环境变量nls_lang和lang,保险起见可以把启动tomcat的用户的环境变量lang也设置成一样的,如果想批量直接执行sql文件,需要保证sql文件也是一样的字符集! 1.首先设置了oracle用户的LNG和NLS_LANG两个环境变量: linux中有两个配置编码的参数LANG和NLS_LANG。LANG是针对Linux系统的语言、地区、字符集的设置,对linux下的应用程序有效,如date;NLS_LANG是针对Oracle语言、地区、字符集的设置,对oracle中的工具有效。 [oracle@tvf-ncMobileapproval-oracle-01 ~]$ export LANG=zh_CN.GB2312 [oracle@tvf-ncMobileapproval-oracle-01 ~]$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 之后编辑一个sql文件,然后将人家给的脚本内存拷贝进去,然后查看该文件的字符集,不再是utf-8了! [oracle@tvf-ncMobileapproval-oracle-01 ~]$ vi 6.sql [oracle@tvf-ncMobileapproval-oracle-01 ~]$ file -i 6.sql 6.sql: text/x-po; charset=iso-8859-1 或者不用copy的方式,直接通过sz 或者ftp等工具直接把厂商的sql文件上传到服务器上,然后通过命令修改文件的字符集:如下具体过程 首先查看需要转换字符集的文件的原始字符集,需要保证文件的字符集和数据库的字符集一样! 注意 charset=iso-8859-1就和gbk兼容! [oracle@tvf-ncMobileapproval-oracle-01 ydpttomcat]$ file -i ydptdb.sql ydptdb.sql: text/x-po; charset=utf-8 使用iconv命令转换文件字符集: [oracle@tvf-ncMobileapproval-oracle-01 ydpttomcat]$ iconv -f utf-8 -t gb2312 /data/ydpttomcat/ydptdb.sql >/data/u01/1.sql 再次查看文件字符集发现已经改变了: [oracle@tvf-ncMobileapproval-oracle-01 u01]$ file -i 1.sql 1.sql: text/x-po; charset=iso-8859-1 然后可以直接登陆数据库,然后倒进数据库了! 2.tomcat的配置文件字符集为gbk,然后重启tomcat!!! 可以通过这个命令来找到tomcat的配置文件的路径 [root@tvf-ncMobileapproval-oracle-01 /data/ydpttomcat]# grep -i -R "URIEncoding" ydptapps/mobem/META-INF/maven/com.yonyou.iuap/mobem/pom.xml: <uriEncoding>GBK</uriEncoding>然后最好修改下启动tomcat服务的用户的环境变量,然后启动tomcat 需要保证数据库和tomcat的字符集保证一致,然后设置Oracle用户的环境变量nls_lang和lang,保险起见可以把启动tomcat的用户的环境变量lang也设置成一样的,如果想批量直接执行sql文件,需要保证sql文件也是一样的字符集! 最好的,最不容易出字符集错误的就是:将数据库字符集、客户端字符集、客户端操作系统NLS_LANG参数三个地方作同样的设置。 重点说下Oracle数据库字符集读取和插入的时候转换过程 insert 的过程: 首先以Oracle客户端的字符集(lang)编码------->然后通过客户端nls_lang告诉sqlplus是以那种字符集编码的------->然后Oracle数据库得知nls_lang后,借助自己的编码表来转换成数据库的字符集,如果使用lang=utf8编码,然后nls_lang=gbk,等Oracle转换的时候,通过gbk的编码表来转换,那么肯定会乱码的!!!!!!!所以只需要lang和nls_lang一样,那么insert就不会乱码!!!!不管数据库的字符集和他一样不一样!!!也就是说Oracle会做字符集转换的工作,客户端不会转换,只会根据lang来查找对应的字符串, select的过程: Oracle数据库根据数据库的字符集utf8把查询的内容进行编码--------->然后告诉sqlplus程序我查出来的内容是以utf8进行编码的,然后sqlplus告诉Oracle他们需要的是nls_lang=gbk,于是Oracle发现不一样,这样Oracle就根据自己的编码表来找gbk的对应编码,然后传给sqlplus程序------>sqlplus直接把得到的这串编码扔给客户端操作系统,而操作系统只是有ZHS16GBK编码表(假如lang= ZHS16GBK ),它不会问得到的这串编码是什么格式的!
Oracle web界面乱码分析
来源:这里教程网
时间:2026-03-03 12:13:17
作者:
编辑推荐:
- Oracle web界面乱码分析03-03
- 什么叫archive log expired?03-03
- word中删除背景颜色的两种方法03-03
- [20181114]一条sql语句的优化.txt03-03
- word中如何删除整页的两种方法03-03
- 京东云环境搭建oracle rac详细部署梳理(可信的结果输出)03-03
- UTL_FILE.PUT写入txt时超过32k报ORA-29285: 文件写入错误03-03
- word中怎么样去掉文字背景03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- UTL_FILE.PUT写入txt时超过32k报ORA-29285: 文件写入错误
- WITH AS and materialize hints
WITH AS and materialize hints
26-03-03 - ORACLE analyse table方式收集表统计信息导致SQL执行计划不准确而性能下降
- HanLP用户自定义词典源码分析
HanLP用户自定义词典源码分析
26-03-03 - orecle分析函数
orecle分析函数
26-03-03 - Windows下用命令行工具ADRCI跟踪日志文件
Windows下用命令行工具ADRCI跟踪日志文件
26-03-03 - word空白页无法删除这么办
word空白页无法删除这么办
26-03-03 - 跨平台级联dataguard配置
跨平台级联dataguard配置
26-03-03 - informatic
informatic
26-03-03 - ORACLE 递归算法
ORACLE 递归算法
26-03-03
