我想了解有关 oracle(通过 sql/plus)如何确定用于评估 sql 脚本的字符集的一些详细信息。
我的数据库配置如下:
select VALUE from nls_database_parameters where parameter='NLS_CHARACTERSET';
VALUE
------
WE8ISO8859P15
Run Code Online (Sandbox Code Playgroud)
问题是我在这里读到http://www.orafaq.com/wiki/NLS会话参数可以优先于数据库参数。
这是否意味着数据库编码被执行脚本的用户的 NLS_LANG 环境变量中定义的编码覆盖?
显然,不可能通过 alter session 语句修改脚本中的编码。
我问这个问题是因为我已经遇到了印度分包商执行的生产脚本字符损坏的问题。我实际上不知道这是因为他对我的文件做了什么错误(比如在 sql gui 客户端中复制/粘贴)还是因为他的环境。
总结一下我的实际问题,如果
用户配置了UTF8字符集
我的sql文件是用UTF8编码的
我的数据库位于WE8ISO8859P15
预先感谢您的回答。
是的,你是对的。Oracle客户端总是在数据库字符集和客户端机器的字符集之间进行转换,这是由NLS_LANG环境变量或系统设置决定的。
请注意,UTF8 仅支持 Unicode 版本 3.1 及更早版本。请改用 AL32UTF8 以获得完整的 Unicode 支持。