以前操作Oracle数据库时,一直用PL/SQL developer。不得不服气这个经验,图形界面能提高效率,但同时也让一个人变的懒惰。这次必须在LINUX上通过Sqlplus来操作Oracle,没办法“逼上梁山”了!但是随后带来一个问题,就是在Sqlplus上的中文全部都是问号。由于以后要更新中文到数据库,因此这个问题必须是要解决的。网上有解决办法,但是写的不够详细。能顺利解决的人,一定要有LINUX知识和Oracle知识,因此我总结下,以后方便菜鸟们操作;
毫无疑问,出现这个问题的原因是数据库服务端和客户端的字符集不一致的原因。我们只要把中环境变量变下就可以了,但是我可不想每次登陆LINUX都修改这个变量,我也记不住,怎么办?慢慢道来。
第一步:Oracle数据库的字符集修改,那可不是好玩的事情,所以我们不打算改服务端的字符集。那就只能改客户端了。好吧,我先查下Oracle服务端的字符集,登陆Sqlplus查看服务端的字符集:select userenv("language") from dual,我这里查询的结果是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
第二步:由于我的用户名称是oracle,因此修改/home/oracle文件夹下的.bash_profile文件。具体如何修改因人而异,如果你的vi使用的熟练就直接用vi命令编辑,如果不熟练你就用ftp下载到本地去修改。修改的内容很简单,就是在文件内容末尾增加以下一列:export NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK( 注意,“=”后边的字符集要根据你自己的情况而定,而且你一定要细心比较下我第一步查询出来的字符集和这边“=”后的值之间的区别,在“."之前的部分要用引号引起来 )
第三步:这里也是我当初搞了许久的地方,因为这个环境变量修改之后,一般情况下系统不重启,是不会生效的。可是我们这个服务器是24*7的,因此是不允许重启的。这个时候source的命令就立功了。这个命令可以让环境变量立即生效,不需要重启服务器或者注销。我们退出sqlplus,然后敲以下命令:source /home/oracle/.bash_profile,打回车。
第四步:OK了,自己测试下,最好是insert、update命令都试下。
补充:source命令的原理其实应该是这样的,由于环境变量是我们随时会用到的(至于为什么,菜鸟们自己查),因此常驻内存是比较高效的办法,因此LINUX操作系统在启动时,会讲这些变量一次性全读取到内存中去。如果,我们不重启服务器,是不会再去读取的。如果我们使用了source命令,则系统马上回重新读取一次最新的,其实应就是从.bash_profile文件中去读取。然后覆盖了内存中的内容)。
毫无疑问,出现这个问题的原因是数据库服务端和客户端的字符集不一致的原因。我们只要把中环境变量变下就可以了,但是我可不想每次登陆LINUX都修改这个变量,我也记不住,怎么办?慢慢道来。
第一步:Oracle数据库的字符集修改,那可不是好玩的事情,所以我们不打算改服务端的字符集。那就只能改客户端了。好吧,我先查下Oracle服务端的字符集,登陆Sqlplus查看服务端的字符集:select userenv("language") from dual,我这里查询的结果是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
第二步:由于我的用户名称是oracle,因此修改/home/oracle文件夹下的.bash_profile文件。具体如何修改因人而异,如果你的vi使用的熟练就直接用vi命令编辑,如果不熟练你就用ftp下载到本地去修改。修改的内容很简单,就是在文件内容末尾增加以下一列:export NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK( 注意,“=”后边的字符集要根据你自己的情况而定,而且你一定要细心比较下我第一步查询出来的字符集和这边“=”后的值之间的区别,在“."之前的部分要用引号引起来
第三步:这里也是我当初搞了许久的地方,因为这个环境变量修改之后,一般情况下系统不重启,是不会生效的。可是我们这个服务器是24*7的,因此是不允许重启的。这个时候source的命令就立功了。这个命令可以让环境变量立即生效,不需要重启服务器或者注销。我们退出sqlplus,然后敲以下命令:source /home/oracle/.bash_profile,打回车。
第四步:OK了,自己测试下,最好是insert、update命令都试下。
补充:source命令的原理其实应该是这样的,由于环境变量是我们随时会用到的(至于为什么,菜鸟们自己查),因此常驻内存是比较高效的办法,因此LINUX操作系统在启动时,会讲这些变量一次性全读取到内存中去。如果,我们不重启服务器,是不会再去读取的。如果我们使用了source命令,则系统马上回重新读取一次最新的,其实应就是从.bash_profile文件中去读取。然后覆盖了内存中的内容)。