NLS_LENGTH_SEMANTICS参数使用注意事项

本文介绍了Oracle的NLS_LENGTH_SEMANTICS参数,用于区分字符类型长度计算方式。参数可设为CHAR或BYTE,影响数据库、实例和会话级别。文章强调了实例/会话级别的变更仅影响之后的对象,并指出Oracle EBS不支持CHAR语义,11g以下创建数据库时应避免直接使用CHAR。此外,Oracle Text不支持实例级别设置为CHAR,低版本客户端可能无法正确处理CHAR语义。文章还讨论了如何限制客户端版本和处理存储过程中的语义问题。
摘要由CSDN通过智能技术生成

从9i开始,oracle提供了NLS_LENGTH_SEMANTICS这个参数,其有两个取值,CHAR和BYTE。当为CHAR时字符类型的长度是按字符个数来计算,而不是按BYTE来计算,这在使用变长字符集(AL32UTF8)的情况下非常有用,因为一个字符所占用的字节数是不定的,就给我们准确估计字段长度(BYTE)带来不便。同时当为CHAR时,对那些采用7/8bit的字符集(US7ASCII/WE8MSWIN1252)来说也不会带来空间上的浪费。

下面就使用使用该参数需要注意的一些地方做出描述

1、该参数分为三个级别,分别是数据库、实例、会话三个级别

可以分别在NLS_DATABASE_PARAMETERS、NLS_INSTANCE_PARAMETERS、NLS_SESSION_PARAMETERS里查询到

数据库级的值在创意数据库时被指定,实例级的值可以通过修改init.ora/Spfile来指定,会话级的可以使用alter session来指定

 

2、实例/会话级的的参数只对其修改之后的对象(包括字段和pl/sql变量)产生作用,修改之前的维持不变。

可以使用ALTER SYSTEM SET NLS_LENGTH_SEMANTICS=CHAR scope=spfile;来修改实例级的参数值

注意,必须需要重启才会生效!(就算指定了scope=both)

 

该参数取值决定顺序

 

1、如果没有客户端(环境变量,后面会讲到)或者会话级指定该值,该参数由实例级的值决定(通过NLS_INSTANCE_PARAMETERS查询)

2、从10g开始,NLS_LENGTH_SEMANTICS可以在环境变量或者注册表中设定,一

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值