WE8MSWIN1252是WE8ISO8859P1的超集,一个需求是将带有全角’符号的字符sqlldr到数据库,在过程中遇到一些问题,记录下来。
csv文件的内容截图如下:
1.由于这个是全角的引号,本地的数据库的字符集是WE8MSWIN1252和WE8ISO8859P1,如果客户端的NLS_LANG和服务器一致的,也是WE8MSWIN1252或WE8ISO8859P1,这两个字符集处理这个字符时还是有区别的,先测试字符集是WE8MSWIN1252的数据库。
将sqlldr的客户端和toad的客户端都设成和数据库一致:
export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
sqlldr导入后会显示乱码
这时需要将nls_lang改成AL32UTF8再导入后就能正常显示:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
导入后的的截图:
2. 接着测试数据库字符集是WE8ISO8859P1的情况
查看当前数据库的字符集:
sqlldr客户端如果是WE8ISO8859P1肯定不行,显示乱码
用AL32UTF8测试一下,export NLS_LANG=AMERICAN_AMERICA.AL32UTF8,sqlldr导入后居然还是乱码:
不过在将当前column的datatype从varchar2改成nvarchar2后,就能显示正常了
3.总结:
1.sqlldr导入时需要将nls_lang改成AL32UTF8,使导入进数据库的格式是正确的。
2.数据库的字符集WE8MSWIN1252处理这种双字节的字符时,datatype可以不是nvarchar2,而WE8ISO8859P1则需要改成nvarchar2。
3.客户端的操作系统需要是英文的,如果是中文的操作系统则显示也会是乱码。