sql - oracle(通过 sql/plus)如何确定用于评估 sql 脚本的字符集

标签 sql oracle

我想了解一些有关 oracle(通过 sql/plus)如何确定用于评估 sql 脚本的字符集的详细信息。

我的数据库配置如下:

select VALUE from nls_database_parameters where parameter='NLS_CHARACTERSET';
VALUE
------
WE8ISO8859P15

问题是我在这里读到 http://www.orafaq.com/wiki/NLS session 参数可以优先于数据库参数。

这是否意味着数据库编码被执行脚本的用户的 NLS_LANG 环境变量中定义的编码覆盖?

显然,不可能通过alter session 语句修改脚本中的编码。

我问这个问题是因为我已经遇到了一个由印度分包商执行的生产脚本的字符损坏问题。我实际上不知道是因为他对我的文件做错了什么(比如在 sql gui 客户端中复制/粘贴)还是因为他的环境。

总结我的实际问题,如果一切正常
  • 用户配置的字符集为 UTF8
  • 我的 sql 文件以 UTF8 编码
  • 我的数据库在 WE8ISO8859P15

  • 提前感谢您的回答。

    最佳答案

    是的,你是对的。 Oracle 客户端总是在数据库字符集和客户端机器的字符集之间进行转换,这由 NLS_LANG 环境变量或系统设置决定。

    请注意,UTF8 仅支持 Unicode 3.1 及更早版本。改用 AL32UTF8 以获得完整的 Unicode 支持。

    关于sql - oracle(通过 sql/plus)如何确定用于评估 sql 脚本的字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956703/

    相关文章:

    mysql - 如何在 MySQL 的 View 中创建临时表

    MYSQL日期时间插入问题

    sql - Oracle SQL 在电话号码中插入括号

    mysql - 如何映射 JPA 实体标识符以在 Oracle 和 MySQL 上工作

    sql - 获取两个值彼此唯一的行

    sql - 如何将个位数值转换为sqlite3支持的日期格式? [ 值 0 填充]

    php - 删除数据库值之前有一个确认屏幕

    oracle - 神秘的 getClobVal()

    sql - 比较来自两个不同表的两列的逗号分隔值

    linux - ORA-01034 : ORACLE not available ORA-27101: shared memory realm does not exist Linux-x86_64 Error: 2: No such file or directory