在NLS_LANG=WE8ISO8859P1,数据库字符集为UTF16的环境下用Oralce OLEDB操作汉字的朋友吗?
我也不知是不是真的是Oracle的人说的,WE8ISO8859P1是中文ZHS16GBK的超集,所以我们的系统用这个字符集。以前数据库字符集是UTF8的,最近挪到IBM的小型机上,数据库字符集变成了UTF16,我们原来的程序就出了点问题。
用SQL Plus往数据库中插入中文,再读出读正常。甚至用微软的OLEDB也对,就是用Oracle的OLEDB乱码,我们要操作BLOB字段,微软的OLEDB只支持Long Raw,不支持BLOB。而Oracle的OLEDB可以操作BLOB字段,可就是出现乱码。查阅Oracle的文档,上面说最好用UTF8的字符集,否则可能出现信息丢失。我试过了很多种NLS_LANG,中文、西文各种各样的都试过,就是没有解决。
此外还有一件怪事就是用Recordset插数据不会乱码。我做过Trace,发现数据发到服务器端就已经变成了乱码,汉字“你好”到服务器端变成了“靠”。四个字节变成了两个字节。Oracle中,汉字乱码都会变成一堆“靠”,真是奇怪。