oracle 命令行插入中文乱码问题分析

Posted by wukaiqiang; tagged with none

程序写入数据库的时候,需要经历3个字符集
1、操作系统字符集
locale
2、数据库客户端字符集
SELECT Userenv('language') FROM dual;--客户端
修改:设置环境变量:nls_lang
3、数据库服务器字符集
SELECT * FROM Nls_Database_Parameters;--服务端

当我们的程序中发生乱码时,很有可能就是我们这三处的设置出现了问题,因此首先确认这三处的各自设置的是什么值。

NLS_LANG(客户端)与数据库服务器字符集不一致时,我们的SQL文插入数据,或者查询时就有可能发生乱码。

当两者一致还是乱码时,很有可能就是我们的系统的字符集不支持NLS_LANG所设置的字符集。

注意,当使用scrt或者xshell 时,需要设置软件的字符集和其他保持一致

通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。在locale环境中,有一组变量,代表国际化环境中的不同设置。