安装oracle DB时,选择的字符集:美国、英语、US7ASCII。
在不设置nls_lang的情况,插入中文,成功,但存进去的是乱码,select看到也是??(无论后面再怎么设置nls_lang),下面第2条记录便是如此。第3条记录是设置了nls_lang = American_america.us7ascii之后插入的。
在命令行设置nls_lang为zhs16gbk,与DB字符集不同
第2条本身存入的有问题,始终是??。
第3条查看时的nls_lang与DB的字符集不同,也与insert时设置的us7ascii不同,因此也是乱码。
设置NLS_LANG与DB的相同
可以看到,设置与DB相同,insert and select都没问题。
启动ODI之前,不设置nls_lang,使用jdbc驱动连接到DB上,查看表的数据:
乱码。
设置nls_lang=American_america.us7ascii,并在同一命令行下启动odi,继续使用jdbc,查看数据:
还是乱码。
在ODI的连接参数中,改为使用jdbc:odbc
查看数据:
正常。
如果设置nls_lang为zhs16gbk,重新启动ODI,则看到的数据:
仍然是乱码。
结论
针对us7ascii字符集的oracle DB,需要在nls_lang中设置与DB相同的字符集,然后使用jdbc:odbc方式访问DB,才能确保在ODI中看到的数据正常显示。