最近在Solaris系统下,用SQL*Loader加载数据时,经常会报一些莫名的错误,找不到某某字段等等。
原因是当你加载的数据有中文时,SQL*Loader会“断错句”,即将本来是以TAB分隔的两个字段,看作是一个字段,这样就导致了字段数不一致的问题。
解决方法是将SQL*Loader置于简体中文环境下运行:
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;
再次运行sqlldr时就会正常加载了。
原因是字符在从客户端到数据库存储的过程中进行了两次转换
看如下图所示
本机当前字符集 - NLS_LANG所指字符集 - DB所用的字符集
ps: Solaris下可使用locale 命令查看当前字符集
$ locale
$ echo $NLS_LANG
如果NSL_LANG <> Database's Character Set
首先本地输入欧元符号时,对应的代码是A4,但A4在NLS_LANG所指的字符集里指的是“太阳符”,最后存储到数据库的时候代码又发生一次转换。
如果NSL_LANG = Database's Character Set
则本地存储的字符将直接存储于DB中
阅读(1444) | 评论(0) | 转发(0) |