刚接触数据库,遇到了个小问题,却花了两天时间。总以为遇到的困难都是因为知识不够,于是乎一味的去搜集信息或者寻求帮助。其实有时候也许是思维能力或者思维方式的问题。
好了,步入正题。我遇到的问题是用pl/sql搜索了数据库的一张表(数据库和plsql都是本地的),结果里面的中文全部变成了“???”。于是去百度了原因:
我总结一下大概有一下三个方面:
一:数据库服务器端和字符集不一致的问题
这个问题我觉着有前辈已经讲得很清楚了,捧上原博链:http://www.2cto.com/database/201111/111388.html
大致归纳一下就是字符集要一致,通过select * from nls_database_parameters;--可以得到结果:AMERICAN_AMERICA_AL32UTF8,这里AL32UTF8为数据库服务器端字符集,然后就是修改dmp文件字符集、环境变量还有编辑注册表使得字符集一致。最后我的结果是这样的:
select * from V$NLS_PARAMETERS--SIMPLIFIED CHINESE_CHINA_AL32UTF8
select * from nls_database_parameters;--AMERICAN_AMERICA_AL32UTF8
select userenv('language') from dual;-- SIMPLIFIED CHINESE_CHINA.AL32UTF8
--SIMPLIFIED CHINESE_CHINA.AL32UTF8 环境变量和注册表
二:原数据问题
你可以去更改一下原数据,搜搜看中文还是不是乱码。(我就是这个没有想到,改了好久,结果是原数据的问题)
三:创建start.bat文件 ,也有可能你已经在plsql的安装根目录下已经有了。这个时候需要看里面的路径和环境变量字符集是不是有问题了。具体操作也是有人写得较清楚了,链接如下:http://jingyan.baidu.com/article/36d6ed1f2861f41bcf488327.html
我的配置如下:
@echo off
set path=D:\instantclient_11_2
set ORACLE_HOME=D:\instantclient_11_2
set TNS_ADMIN=D:\instantclient_11_2#
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
start plsqldev.exe
这里可以先用.txt来编辑,另存为.bat就可以了。
最后,产生问题的原因有很多种,解决方式也有很多种,希望大家可以在解决问题的过程中学到的不仅仅是知识还有思考方式。感谢分享知识伟大网友。