对于这个问题,网上有一大堆的解决方法,然并卵,千篇一律的抄,我就不信他们遇到的问题的解决方法是一样的,尼玛,连数据库的字符编码都没看过,即使偶然蒙对了也是
知其然而不知其所以然,对于这种答案我只能呵呵了。下面说一下我的问题:首先从我本地导出一张表,名字为aa.sql,编码什么的从导出到导出完成,完全没有设置过。然后
直接上传到服务器,sqlplus a/b 进去之后,使用@/x/y/aa.sql执行sql语句,然而还是too young too simple ,oracle你就放过我吧,不要这么磨人好不。报的错误好像是table not exist
看一下执行的sql:DROP TABLE "CTSI"."PROVINCE_CITY";这条语句明显有错误好吗,为毛用工具导出来的sql那么弱逼呢,然后我挽起袖子,直接拷贝sql来执行了,好不容易把表建好了,然后直接拷贝insert 语句,只当我以为万事大吉的时候,妈妈的,还真不省事啊,ORA-01756: quoted string not properly terminated,我知道我碰到编码不一致的问题了
因为我的数据里面有中文,于是乎找度娘问问怎么解决,可是可是可是,找到的都是尼玛的类似于这篇文章所说的:http://blog.csdn.net/cancan8538/article/details/13290531
真尼玛的天下文章一样抄啊,我知道应该根据具体的编码格式来解决,但是哥不知道有哪些编码方式。于是乎有了下面的内容:
查看NLS_LANG 的方法
[oracle@smzdb012022 ~]$ env|grep NLS_LANG
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
查看数据库当前字符集参数设置
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
客户端NLS_LANG 的设置方法
Unix:
# 常用unicode字符集
export NLS_LANG=american_america.AL32UTF8
# 常用中文字符集
export NLS_LANG="Simplified Chinese_china".ZHS16GBK
可以编辑bash_profile 文件进行永久设置
vi .bash_profile
NLS_LANG="Simplified Chinese_china".ZHS16GBK export NLS_LANG
# 使bash_profile 设置生效
source .bash_profile
其中我是通过export NLS_LANG=american_america.AL32UTF8来设置成功的,因为我本地使用notepad+来打开的也是utf-8的编码
最后想吐槽一下的就是secureCRT真尼玛难用。