NLS_LENGTH_SEMANTICS 在多字节字符集的作用

今日在网上看到NLS_LENGTH_SEMANTICS参数,好像是对多字符集数据库有一些影响,在平时建立table时有时也遇到过byte和char,正好来研究一下,发现好像此参数在10.2.0.3中已不起作用了。[@more@]

NLS_LENGTH_SEMANTICS 在多字节字符集的数据库中决定CHAR, VARCHAR2的长度。数据库创建表时,依据这个值来确定实际列的长度,例如数据库字符集为ZHS16GBK

数据库版本是10.2.0.3
SQL> select * From v$version where rownum=1;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod

SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

PARAMETER VALUE
---------------------------------------------------------------- -----------------------------------
NLS_CHARACTERSET ZHS16GBK


SQL> show parameter nls_length_semantics

NAME TYPE VALUE
------------------------------------ ----------- -------------
nls_length_semantics string BYTE

SQL> create table test ( a varchar2(4)) ;

表已创建。

SQL> desc test;
名称 是否为空? 类型
----------------------------------------- -------- -------------------
A VARCHAR2(4)

SQL> insert into test values('中国人民');
insert into test values('中国人民')
*
第 1 行出现错误:
ORA-12899: 列 "SYS"."TEST"."A" 的值太大 (实际值: 8, 最大值: 4)


改变参数值为CHAR

SQL> alter session set nls_length_semantics = CHAR ;

会话已更改。

SQL> show parameter nls_length_semantics

NAME TYPE VALUE
------------------------------------ ---------------------- --------
nls_length_semantics string CHAR


SQL> create table test1 (a varchar2(4));

表已创建。

SQL> desc test1;
名称 是否为空? 类型
----------------------------------------- -------- -------------------
A VARCHAR2(4)

SQL> insert into test1 values('中国人民');
insert into test1 values('中国人民')
*
第 1 行出现错误:
ORA-12899: 列 "SYS"."TEST1"."A" 的值太大 (实际值: 8, 最大值: 4)

改了参数nls_length_semantics,好像建立的table并没有用此值作为默认值。


直接在建表时指定char类型,成功插入。
SQL> create table test2 (a varchar2(4 char));

表已创建。

SQL> insert into test2 values('中国人民');

已创建 1 行。

此操作并没有说明NLS_LENGTH_SEMANTICS参数的作用,但已证明建表时 byte和char的区别。

参考:http://www.oracle-base.com/articles/9i/CharacterSemanticsAndGlobalization9i.php

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/271283/viewspace-988520/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/271283/viewspace-988520/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值